Objective-C の enumerateObjectsUsingBlock: の例を Squeak Smalltalk で
Smalltalkってかなり昔からあるというのは知っています。
enumerateObjectsUsingBlockの練習 | プログラマメモ2
といいつつもSmalltalkのことわかってません....
※^これがでてくるところとか...
何かの参考になれば…と、同じような処理を Squeak Smalltalk に書き直してみました。あと念のため、Smalltalk ではブロックとは関係なく return の意味で ^ を使います。Objective-C のブロックに出てくる ^ とは関係ありません。
| dataClass | dataClass := Object subclass: #MyData instanceVariableNames: 'myname' classVariableNames: '' poolDictionaries: '' category: 'Category-Name'. Browser new setClass: dataClass selector: nil; createInstVarAccessors.
| array enumerator | "データをつくる" array := OrderedCollection new. 0 to: 4 do: [:i | | mydata | mydata := MyData new. mydata myname: i asString. array add: mydata]. World findATranscript: nil. "その場で定義してその場で使うパターン" "中身の確認" array do: [:obj | Transcript cr; show: '==> ', obj myname]. "BLOCKで使ってソート!!" array sort: [:obj1 :obj2 | Transcript cr; show: ('[{1}]と[{2}]を比較' format: {obj1 myname. obj2 myname}). obj2 myname < obj1 myname]. "宣言したものを後から使うパターン" enumerator := [:obj | Transcript cr; show: 'enumerator ==> ', obj myname]. array do: enumerator
==> 0 ==> 1 ==> 2 ==> 3 ==> 4 [0]と[1]を比較 [1]と[2]を比較 [3]と[4]を比較 [2]と[4]を比較 [2]と[3]を比較 enumerator ==> 4 enumerator ==> 3 enumerator ==> 2 enumerator ==> 1 enumerator ==> 0