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

Lea*_*lia 6 smalltalk

假设我们有以下方法序列:

m1
    self m2: [^1]

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

m3: block
    [block value] ensure: [^2]
Run Code Online (Sandbox Code Playgroud)

问题是什么是价值anObject m1

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

  1. 在确保的块中忽略块的返回:在这种情况下m1将返回1.
  2. 块中的返回在确保的块中得到尊重:在这种情况下,图像将崩溃.

请注意,我不会问会发生什么.我对执行流程的定义很感兴趣.


编辑

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

Luk*_*gli 4

查看ANSI Smalltalk 标准草案第 23 页,其中描述了 return 语句及其与ensure:块的交互:

如果终止块的计算以返回语句的执行结束,则结果是未定义的。