咳といいます。

1.6.8のときのノウハウとか思い出してきました。
1.7系で追加されたProc#yieldを使おうとしてはまってしまったようです。> 咳

1.6.8ではyieldを真似するために [argv].collect(&obj)[0] を使ってました。
次のようにすることでRuby相当の挙動をさせています。
(__drb_yieldがyield相当です。)

     def obj_send(obj, msg_id, *argv)
       if Proc === obj && msg_id == :__drb_yield
         if argv.size == 1
           ary = argv
         else
           ary = [argv]
         end
         if false        # FIXME
           ary.collect(&obj)[0]
         else
           it = ary.collect(&obj)
             raise(LocalJumpError, 'break from proc-closure') if it.nil?
           it[0]
         end
       else
         obj.__send__(msg_id, *argv)
       end
     end

今日のまつもとさんの変更で1.6.8と同様にすることで動きそうです。> まつもとさん感謝
でも新たな問題がでちゃいました。そっちは別メールにします。


*argでうけてyield(*arg)するのであれば、田中さんが指摘されている
ケースの仕様が変わらないとだめそうですね。
# 以前気付いてメモしておいたのを忘れてました。すみません。

> とするのと、[ruby-dev:19231] で推奨されている、いったん |*a| で受けて
> yield *a で渡すというのに対応する
>
>> |> def f; yield [[]]; end; f {|*a| test_ok(a, [[]])}
>> |> def f; yield *[[]]; end; f {|a| test_ok(a, [])}
>
> というので結果が異なるのは wrapper になってないからまずいだろう、とい
> うことです。
>
> つまりこれも |*a| で受けて yield *a とするのがいいだろうという話に対す
> る反例の提示です。