从块内部返回确保块的语义是什么?

时间:2015-01-09 01:12:25

标签: smalltalk

假设我们有以下一系列方法:

m1
    self m2: [^1]

m2: block
    self m3: block.
    Processor := nil "crash!"

m3: block
    [block value] ensure: [^2]

问题是anObject m1的价值是什么?

换句话说,[ˆ2]的语义是否被定义为一个确定的块?有两种可能性:

  1. 在确保的块中忽略来自块的返回:在这种情况下,m1将返回1
  2. 块中的返回在确保块中得到尊重:在这种情况下,图像将崩溃。
  3. 请注意,我不会问会发生什么。我对执行流程的定义很感兴趣。


    修改

    COROLLARY 1(Lukas在下面的回答中证实):编程风格不是很好!

1 个答案:

答案 0 :(得分:4)

检查Draft of ANSI Smalltalk Standard的第23页,其中描述了return语句及其与ensure:块的交互:

  

如果终止块的评估以执行return语句结束,则结果是未定义的。