From: sinara@... Date: 1997-01-27T21:23:42+09:00 Subject: [ruby-list:1914] Re: [Dist] Mutex 原です。 > |あれ?その通りですね。こうしたのは何か訳があったんだけど、、、、 > |忘れた。^^; あ、思い出した。最初 send はイテレータのコンテクスト(とい うべきか?)をそのまま渡すのではないかと思ったんでした。 つまり、 def method_missing(*x) @mutex.synchronize do @body.send(*x) end end と書くだけでイテレータブロックをそのまま実行できると。で もそうではなかったので、iterator? で条件分岐させてみた。 でも動かなかった。(昔 send はイテレータブロックを呼べな かった。)で、 x.shift の値で場合わけしてイテレータを自 分で定義した、、、と、そういう歴史でした。^^; > |効率に目をつむれば、「必ず呼ばれるメッソッド method」 とか > |あると面白いですね。デフォルトが > ちょっと分かんなかった.method_missingの中で呼ばれるのに便利 > なメソッドって意味でしょうか? method_missing は呼ばれたり呼ばれなかったりするんだけど、 これは、メソッドを呼ぶ時、必ず最初に呼ばれるメソッドとい うのかな。つまり、今だったら def to_s @body.to_s end def method_missing(meth, *x) @mutex.synchronize do @body.send(meth, *x) end end と書くところが def method(meth, *x) case meth when :to_s @body.send(meth, *x) else @mutex.synchronize do @body.send(meth, *x) end end end みたいに書けるわけ。便利なのか何なんだか。:-) ---===-=-=-=-=-=-=-=-=======--=-=-=-==-=-===-=-=-=-=-=-=--=-==-=-- Shin-ichro Hara(Nagaoka Univ.of Tech.)