結果は、| collection usableSymChars | usableSymChars := '`-=[]\;'',./~!@#$%^&*()_+{}|:"<>?'. collection := OrderedCollection new. (Scanner classPool at: #TypeTable) doWithIndex: [ :each :index | | char | char := Character value: index. ((usableSymChars includes: char) and: [each == #xBinary]) ifTrue: [collection add: char]]. ^ collection collect: [ :each | {each. (Smalltalk numberOfImplementorsOf: each asSymbol) isZero}]
で、単独では true のものだけ使えます。false は単独ですでにセレクタとして登録・使用済みのものなので、単独では使用できませんが他の文字と組み合わせて、もちろん、組み合わせた結果が未使用ならば使うことができます。「-」は負数をパースするためのパーサーの都合で、2文字目以降には使えません。#(($! true) ($% true) ($& false) ($* false) ($+ false) ($, false) ($- false) ($/ false) ($< false) ($= false) ($> false) ($? true) ($@ false) ($\ true) ($` true) ($~ true))
と定義すれば、Haskell 風に #((1 2 3) (4 5 6) (7 8 9)) !! 2 !! 3 で 6 を取り出すことなどができるようになります。なお余談ですが、元の #at: はキーワードメッセージセレクタなので、(#((1 2 3) (4 5 6) (7 8 9)) at: 2) at: 3のように同じことをするのにも括弧でくくらなければなりません。二項メッセージセレクタに置き換えるとこうした括弧を省略できるメリットもあります。--sumimObject >> !! index ^ self at: index
このページを編集 (1604 bytes)
以下の 2 ページから参照されています。 |
This page has been visited 3525 times.