From: Yukihiro Matsumoto Date: 2009-11-28T16:14:19+09:00 Subject: [ruby-dev:39807] Re: バグ? ブロック引数で to_ary が呼ばれる必要のない場面で呼ばれる まつもと ゆきひろです In message "Re: [ruby-dev:39806] Re: バグ? ブロック引数で to_ary が呼ばれる必要のない場面で呼ばれる" on Sat, 28 Nov 2009 14:24:29 +0900, keiju@ishitsuka.com (石塚圭樹) writes: |ただし, ブロック呼び出しの旅にto_aryが呼ばれるとなると, 分散オブジェク |ト的には毎回通信が発生することになりますので, to_aryをリモート側が持っ |ているかどうかのフラグを持たせて持っているときのみリモート側にto_aryを |送る様にしようかと思ったのですが... | |前送ったスクリプトで, | |class E | def to_ary | raise NoMethodError, "to_ary" | end |end | |としてもだめなんですね... to_aryがdefしてあるんだけど存在しないことに |したいときはどうすればよいでしょう? なんとなく, 条件(1)にマッチしてい |るように見えるので, 大丈夫そうだったんですが?? name属性がセットされてないからですね。 raise NoMethodError.new(message, :to_ary) としてください。 |あと, delegetor.rb も対処が必要そうな気がすると思って, 調べてみたらちゃ |んとできていますね... | |で, delegator.rb のなかを見ると: | | target = self.__getobj__ | unless target.respond_to?(m) | super(m, *args, &block) | else | target.__send__(m, *args, &block) | end | |となっていて, respond_to? がありますが, なぜこんなことやっているのでしょ |う? これがらみ? そうです。