2017-01-13 24 views

回答

3

是結果!事實上,你可以用它們做很有趣的事情,比如在他們自己內部激活它們。例如,該塊計算階乘遞歸調用自身:

factorialBlock := [:n | 
    n <= 1 
     ifTrue: [n] 
     ifFalse: [n * (factorialBlock value: n - 1)] 
] 

,並嘗試一下:

factorialBlock value: 5 

這不會是一個非常良好的編碼習慣的一個例子,但它的力量封鎖!

3

是的,它可以。此外,您發送消息「值」來評估該塊,而不是「運行」。實際上,您不必將其分配給變量。你可以這樣做:

[ ... ] value. 
2

讓我們添加,除了value,如果你的塊有爭論,你也可以使用

[:f | <do something with f>] value: a 

其中f正式參數(未綁定變量名)和a實際對象,當發送#value:時,該對象將綁定到f

對於兩個參數使用value:value:和許多valueWithArguments:,其中收到Array


例子

[:x | x squared - 1] value: 3 
           -> 3 squared - 1 (i.e., 8) 

[:x :y | x + 2/(y - 4)] value: 2 value: 0 
           -> 2 + 2/(0 - 4) (i.e., -1) 

練習

有什麼評價?:以下

block := [:x | x value: 2]. 
block value: [:y | y + 1] 
相關問題