假设我们有以下一系列方法:
m1
self m2: [^1]
m2: block
self m3: block.
Processor := nil "crash!"
m3: block
[block value] ensure: [^2]
问题是anObject m1
的价值是什么?
换句话说,[ˆ2]
的语义是否被定义为一个确定的块?有两种可能性:
m1
将返回1
。请注意,我不会问会发生什么。我对执行流程的定义很感兴趣。
修改
COROLLARY 1(Lukas在下面的回答中证实):编程风格不是很好!
答案 0 :(得分:4)
检查Draft of ANSI Smalltalk Standard的第23页,其中描述了return语句及其与ensure:
块的交互:
如果终止块的评估以执行return语句结束,则结果是未定义的。