市田です。

質問の意図を正しく把握できているか不安ですが。

On 2016/11/07 15:54, yamataka / u08.itscom.net wrote:

> class NetWorkAudioDevice
>
>    attr_reader	:is_in_nw
>
>    def initialize(device,is_in_nw)
>     @is_in_nw = is_in_nw
>     ...
>    @webapi      = WebAPI.new(@ip,api_port,@is_in_nw)
>    @render      = Rendering.new(device.service,@is_in_nw)
>    @avtransport = AVTransport.new(device.service,@is_in_nw)
>   end
> end
>
> 各WebAPI,Rendering,AVTransportをインスタンス作成する際に、@is_in_nwを渡
> し、
> それぞれの関数内で、判別するしかないのかでしょうか?
>
> NetWorkAudioDevice class内から、それぞれWebAPI,Rendering,AVTransportのイ
> ンスタンスを作成しているので、
> インスタンス作成時に、@is_in_nwを渡さなくても、参照できるんいい方法があ
> るんじゃないか?

Renderのインスタンスから何かの方法で参照できたとして、その情報を元に
SetMute(これは set_mute が良いかと)のふるまいを変えるなら

 > それぞれの関数内で、判別するしかないのかでしょうか?

となってしまうのではと思います。

2つのインスタンスは独立したオブジェクトなので、作成されたインスタンス側
で判定するのであれば、判定できるよう、何らか参照できる手段を提供する必要 
があり、思いつくのは

1. @is_in_nw を渡す(書かれている方法)
2. self を渡す
3. @is_in_nw を判定できるクロージャを渡す

くらいです。

もっとも渡さなくても、render メソッドを単なるアクセッサメソッドとせずに
@is_in_nw が false の場合は、render メソッドが false を返すとか、例外と 
する手もあります。これだとDeviceクラス側の処理で済みます。

ただこう考えてくると
- @is_in_nw が false の場合でも Render などのインスタンスを作成する意味 
があるか
- 作成したとして、その場合に呼びされたインスタンスメソッドは @is_in_nw
の値に従ってどう振る舞うのが良いか
- @is_in_nw は動的に変わるのか、それともDeviceインスタンス生成時に指定し 
た以降変化するのか
など、クラスにどのような役割をもたせるのかなど、クラス設計の話になるので
はと思います。