More Related Content
Similar to Reading 1st dRuby (20)
Reading 1st dRuby
- 32. • デフォルトで DRbProtocol は DRbTCPSocket を要素として持つ配列を保持している
• DRb::DRbProtocol.class_eval( @protocol ) # => [DRbTCPSocket]
DRb::DRbProtocol
https://github.com/ruby/ruby/blob/v2_2_0_preview2/lib/drb/drb.rb#L1019
• 721行目以降にDRbProtocolの各種メソッドの定義があるが、いずれも@protocolへ
の委譲となっている
- 33. • DRbTCPSocket.open は、TCPSocket.open で接続を行う
DRb::DRbTCPSocket
https://github.com/ruby/ruby/blob/v2_2_0_preview2/lib/drb/drb.rb#L815
• DRbTCPSocket.open_server は、TCPServer.open でサーバー接続をオープンする
- 40. method_missingが適切な例
『Ruby Magazine 出張版 正しいRubyコードの書き方講座』65ページより抜粋
どんな場合ならmethod_misssingを使ってもよいのでしょうか。例
えばmethod_missingの「よい」応用例としてはdrb (Distributed
Ruby) が挙げられます。drbではリモートオブジェクトにメソッドを転
送するためにmethod_missingが効果的に使われています。
!
1つめは、転送先のオブジェクトにどんなメソッドがあるのか効率よく判
断できないことです。Rubyではいつメソッドが追加されるかわからない
うえに、method_missingのような機構があるため、実際にメソッド
を呼んでみなければ本当にメソッドが存在しないのか判定できません。
2つめは、すべてのメソッドが対等に扱われるということです。drbにお
いて、method_missingが拾われたメソッド呼び出しは基本的にすべ
て転送されます。「すべて」というところがポイントです。 (以下略)