[ruby-list:50461] Re: [質問] classから作成したインスタンスから作成元のclassのインスタンス変数を参照するには
From:
<yamataka@...08.itscom.net>
Date:
2016-11-10 04:34:16 UTC
List:
ruby-list #50461
山口です。
> 市田です。
> 設計、I/Fの是非はともかく、上のことをあまり手間をかけずに実現するとし
て
下記のスクリプト、私の頭では到底思い浮かばなかいので、目から鱗でした。
method_missingを用いたり、class そのものを引数にできる等...、super も...
したいと思っていた内容そのもので、大変勉強になりました。
ご教示ありがとうございます。
> class StubMethod
> def initialize(obj)
> @obj = obj
> end
>
> def method_missing(name, *args)
> super unless @obj.respond_to? name
> puts "#{name} does not work"
> end
> end
>
> class Render
> def play
> puts "Render#play"
> end
> end
>
> class Device
> attr_reader :render
> def initialize(device, is_nw_in)
> @device = device
> render = Render.new
> @render = if is_nw_in
> render
> else
> StubMethod.new(render)
> end
> end
> end
>
> という方法はどうでしょう。
> Render のインスタンスを生成して、そのインスタンスが応答できるメソッド
> が呼ばれたら何らかのメッセージを出すというものです。
> 応答できないもの=Render にないメソッドを呼び出したときは、いつもどお
り
> NoMethodError になります。
>
> もしくは, class を引数にするのでも良いです。
>
> class StubMethod
> def initialize(klass)
> @klass = klass
> end
>
> def method_missing(name, *args)
> super unless @klass.instance_methods.include? name
> puts "#{name} does not work"
> end
> end
>
> class Device
> attr_reader :render
> def initialize(device, is_nw_in)
> @device = device
> @render = if is_nw_in
> Render.new
> else
> StubMethod.new(Render)
> end
> end
> end
>
> ではでは。
>
>
>