From: rubikitch Date: 2005-11-20T01:12:27+09:00 Subject: [ruby-list:41571] Re: 別クラスのメソッドを横取り From: 石井 大海 Subject: [ruby-list:41570] 別クラスのメソッドを横取り Date: Sun, 20 Nov 2005 00:25:35 +0900 るびきちです。 > class A > def gogo > back > puts "hihi" > end > end > > b = SimpleDelegator.new(A.new) > def b.back > puts "not!" > end > 略 > まあ、Aもbに委任させればいいと云えばそれまでですが、 > 余りスマートとは思えません。 そうですか? 僕はdelegate.rbはあまり好きではありません。 僕の場合、委譲といったら迷わずforwardable.rbを使います。 なぜなら、委譲するメソッドを柔軟に指定できるからです。 method_missingはいろいろと落とし穴があるのでめったなことでは使いたくないです。 自分の知らないメソッドをなんでもかんでも無責任に押し付けるのは…。 まあ稀にそれが有効なケースはありますけどね。 それにtypoがあると発見が困難です。 なぜなら本来例外が上がるべきところで上がらずに実行を続けてしまうのですから。 require 'forwardable' class A extend Forwardable def_delegator :@b, :back attr_accessor :b def gogo back puts "hihi" end end class B extend Forwardable def_delegator :@a, :gogo def initialize(a) @a = a end end a = A.new b = B.new(a) a.b = b def b.back puts "not!" end b.gogo るびきち☆ http://www.rubyist.net/~rubikitch/