2007年 10月 21日

Io における method と block の違い

一番大きいのは doc に書いてあるとおりスコープの違い (というか、ローカルオブジェクト (=変数オブジェクト) がどこからクローンされるか) だけれど、それだけじゃなくて、call が必要かどうかもあるみたいだ。

a := Object clone do (
	aBlock  := block("called block")
	aMethod := method("called method")
)

a aBlock print
#=>
# # test.io:3
# method(
#     "called block"
# )
a aBlock call print  #=> called block
a aMethod print      #=> called method
a getSlot("aMethod") print
#=>
# # test.io:4
# method(
#     "called method"
# )

block の場合は自動的に呼ばれない。