return from block inside ensured blocks 的语义是什么?
What's the semantics of return from block inside ensured blocks?
假设我们有以下方法序列:
m1
self m2: [^1]
m2: block
self m3: block.
Processor := nil "crash!"
m3: block
[block value] ensure: [^2]
问题是 anObject m1
的值是多少?
换句话说,[ˆ2]
的语义是否被明确定义为一个安全块?有两种可能:
- 来自块的return在确保块中被忽略:在这种情况下
m1
将return与1
。
- 块中的 return 在确保块中得到尊重:在这种情况下图像会崩溃。
请注意,我不是在问会发生什么。我对执行流程的定义比较感兴趣。
编辑
推论 1(Lukas 在下面的回答中证实了这一点):这不是一种好的编程风格!
查看 Draft of ANSI Smalltalk Standard 的第 23 页,其中描述了 return 语句及其与 ensure:
块的交互:
If the evaluation of a termination block concludes with the execution of a return statement the result is undefined.
假设我们有以下方法序列:
m1
self m2: [^1]
m2: block
self m3: block.
Processor := nil "crash!"
m3: block
[block value] ensure: [^2]
问题是 anObject m1
的值是多少?
换句话说,[ˆ2]
的语义是否被明确定义为一个安全块?有两种可能:
- 来自块的return在确保块中被忽略:在这种情况下
m1
将return与1
。 - 块中的 return 在确保块中得到尊重:在这种情况下图像会崩溃。
请注意,我不是在问会发生什么。我对执行流程的定义比较感兴趣。
编辑
推论 1(Lukas 在下面的回答中证实了这一点):这不是一种好的编程风格!
查看 Draft of ANSI Smalltalk Standard 的第 23 页,其中描述了 return 语句及其与 ensure:
块的交互:
If the evaluation of a termination block concludes with the execution of a return statement the result is undefined.