2011年4月22日

[ruby-list:47997] lambda中のProc中のreturnの挙動について

高尾と申します。
ちょっと日本語では表しにくいのですが、件名の通り、lambda中のProc中のreturnの挙動が不可解だったため、バグかと思い、投稿します。

a = lambda do
b = Proc.new do
return
end
b[]

end
a[]

上記のコードを実行すると、ruby1.8.7ではLocalJumpErrorが起こり、ruby1.9.1では正常終了します。
lambda中のreturnはcallのreturnになり、Proc.new中のreturnは生成元のreturnになる筈なので、
正常終了が正しい挙動のように思います。

また、

def a
b = lambda do
Proc.new do
return
end
end
b[][]
end
a

を実行すると、ruby1.8.7、ruby1.9.1ともに正常終了します。
こちらは、Proc.new中のreturnが実行されるときには生成元が既に終了しているので、LocalJumpErrorが起こるのが正しい挙動のように思います。


投稿者 xml-rpc : 2011年4月22日 16:31
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/103212
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。