From: Masatoshi SEKI Date: 2003-03-12T23:31:35+09:00 Subject: [ruby-dev:19809] Re: (1.8.0-preview2) Proc#call 咳といいます。 > 3のyieldメソッドですが、これは1.7から導入されたものです。使 > い方はcallと同じです。 > > p.yield > > もともとyieldはcallで行われているパラメータの数の厳密なチェッ > クを回避することが目的で、挙動の違いもそれだけでした。しかし、 > ruby-bugs-ja PR#98の過程でbreakを例外にするかどうかという違 > いも付与されるようになりました。でも、今改めて考えると一つの > メソッドに複数の目的を付与するのはやっぱり良くないようにも思 > います。もし、可能であればlocal jumpについては上記のABBまた > はABAでcallと揃えた方が良いと思います。 > > さて、となると最終的に考慮しなければならない問題は、dRubyが > ネットワークを介してブロックを実行するときbreakやretryを検出 > しなければならない時、最低限なにが必要か、という点です。 例外によって知る方法が気に入っているわけではないんですが、 単純なメソッド呼出しでわかるのでお手軽だと思ってます。 dRubyとしてはいろいろな準備なしでProcに聞けるのが一番うれしいです。 ちょっと、いやすごくわがままなんですが、yieldと同じパラメータの扱いで yieldの値とlocal jumpの様子が戻ってくるメソッドがあったらいいのに…と 思ってます。 jump, value = aProc.m_seki_yield(1,2) # jump に :return, :next, :break, :redo, :retry, nil のどれかが返る # value は yield の戻り値 > 田中哲さんが以前に例外に依存しない方法を提案していらっしゃっ > たと思うのですが、もう忘れちゃったなあ。 覚えていますとも。うなされるくらい覚えてます。 いろいろトライしたのですがまだうまくいっていません。 実験のあとがちょっとだけここにあります * http://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=FakeYield #1.8のProc#yieldの挙動でもある程度は動くようになったので最近ちょっとサボってます。 # 値付きのbreakに対応できていませんが…。