- 134 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 20:56:12 ]
- >>120
1.9の、しかもあくまで俺の理解した範囲でいうけど、まずコンパイル結果からして違う ブロックの中のreturnはthrow 1っていう特殊な例外を投げる命令になるけど 普通のメソッド中のreturnはleaveっていうフレームを終了させる命令になる で、ブロックがフレームに積まれるとき、lambdaかどうかはフレームに記憶されていて 前述の例外が通知されると、実行中のフレームがlambdaかメソッドならリターン処理 普通のブロックなら例外をさらに上のフレームに伝播させる、って感じでやってる とそういうわけで、この特殊例外を発生させる方法がRubyにはないので無理です あーあと、フレームってのは動的な処理の単位ね、メソッドとかクラス定義とかブロックとか 詳しく種類を知りたかったらvm_core.hにVM_FRAME_MAGIC_なんちゃらって並んでるから
|

|