Smalltalk の #timesRepeat: を Ruby の #times っぽく使う

Rubyの times って引数とれるんですね。初めて知りました。いいなぁRubySmalltalk の #timesRepeat: は引数なしなので、Rubyのもてっきりそうだと思い込んでました(^^;

みねこあ - ツンデレC#2.0 の yield 入門 - コメント欄


えーっ。Smalltalk でも引数、とれますよ。

World findATranscript: nil.
5 timesRepeat: [:i | Transcript cr; show: i]
=> 1
   2
   3
   4
   5


……、嘘です。 ごめんなさい。ごめんなさい。ごめんなさいっ。w

Integer >> timesRepeat: aBlock 
   | count |
   count := 1.
   [count <= self] whileTrue: [
      aBlock numArgs isZero ifTrue: [aBlock value] ifFalse: [aBlock value: count].
      count := count + 1]


おまけ。

World findATranscript: nil.
5 timesRepeat: [Transcript cr; show: (thisContext sender tempAt: 2)]