Objective-C の enumerateObjectsUsingBlock: の例を Squeak Smalltalk で

Smalltalkってかなり昔からあるというのは知っています。
といいつつもSmalltalkのことわかってません....
※^これがでてくるところとか...

enumerateObjectsUsingBlockの練習 | プログラマメモ2


何かの参考になれば…と、同じような処理を 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