1 -- forwatable.rb 2 $Release Version: 1.1 $ 3 $Revision: 47689 $ 4 5=begin 6= Forwardable 7 8クラスに対しメソッドの委譲機能を定義します. 9 10== 使い方 11 12クラスに対してextendして使います. 13 14 class Foo 15 extend Forwardable 16 17 def_delegators("@out", "printf", "print") 18 def_delegators(:@in, :gets) 19 def_delegator(:@contents, :[], "content_at") 20 end 21 f = Foo.new 22 f.printf ... 23 f.gets 24 f.content_at(1) 25 26== メソッド 27 28--- Forwardable#def_instance_delegators(accessor, *methods) 29 30 ((|methods|))で渡されたメソッドのリストを((|accessorに|))委譲する 31 ようにします. 32 33--- Forwardable#def_instance_delegator(accessor, method, ali = method) 34 35 ((||method|))で渡されたメソッドを((|accessor|))に委譲するようにし 36 ます. ((|ali|))が引数として渡されたときは, メソッド((|ali|))が呼ば 37 れたときには, ((|accessor|))に対し((|method|))を呼び出します. 38 39--- Forwardable#def_delegators(accessor, *methods) 40 41 ((|Forwardable#def_instance_delegators|))の別名です. 42 43--- Forwardable#def_delegator(accessor, method, ali = method) 44 45 ((|Forwardable#def_instance_delegator|))の別名です. 46 47= SingleForwardable 48 49オブジェクトに対し, メソッドの委譲機能を定義します. 50 51== 使い方 52 53オブジェクトに対して((|extend|))して使います. 54 55 g = Goo.new 56 g.extend SingleForwardable 57 g.def_delegator("@out", :puts) 58 g.puts ... 59 60== メソッド 61 62--- SingleForwardable#def_singleton_delegators(accessor, *methods) 63 64 ((|methods|))で渡されたメソッドのリストを((|accessor|))に委譲する 65 ようにします. 66 67--- SingleForwardable#def_singleton_delegator(accessor, method, ali = method) 68 69 ((|method|))で渡されたメソッドを((|accessor|))に委譲するようにしま 70 す. ((|ali|))が引数として渡されたときは, メソッド((|ali|))が呼ばれ 71 たときには, ((|accessor|))に対し((|method|))を呼び出します. 72 73--- SingleForwardable#def_delegators(accessor, *methods) 74 75 ((|SingleForwardable#def_singleton_delegators|))の別名です. 76 77--- SingleForwardable#def_delegator(accessor, method, ali = method) 78 79 ((|SingleForwardable#def_singleton_delegator|))の別名です. 80=end 81