[Pharo-project] Block semantics ....
Hi All, I'm wondering about documentation to describe the block semantics of Pharo Smalltalk, Specifically around the return context when a block contains a return: [ ^ foo ] Is a block valid only within the method that defined it and passed / called it? I think it is, and when called outside of the context there is a BlockContext no longer exists error. However, I'm looking for documentation or confirmation to ensure my testing was correct. Rgs, James.
On Sun, Nov 28, 2010 at 1:37 PM, James Ladd <james_ladd@hotmail.com> wrote:
Hi All,
I'm wondering about documentation to describe the block semantics of Pharo Smalltalk, Specifically around the return context when a block contains a return: [ ^ foo ]
Is a block valid only within the method that defined it and passed / called it? I think it is, and when called outside of the context there is a BlockContext no longer exists error.
Note that BlockContext is no longer used. | b | b := [thisContext class]. { b class. b value } answers { BlockClosure. MethodContext }. The block is valid, but the attempt to return from a method can only be made once, whether made form an embedded block or the mehtod itself. So the first attempt to retur wins. However, a block =containing a return can still be evaluated. An error will occur only if the retrn is actually executed. So e.g. fibBlock | b | ^b := [:n| n < 0 ifTrue: [^self error: 'Nooooooo!']. n < 2 ifTrue: [1] ifFalse: [(b value: n - 1) + (b value: n - 2)]] (0 to: 10) collect: self fibBlock works fine but self fibBlock value: -1 will produce a cannot return error.
However, I'm looking for documentation or confirmation to ensure my testing was correct.
Rgs, James.
participants (2)
-
Eliot Miranda -
James Ladd