Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > drbライブラリ > DRb::DRbUnknownクラス

class DRb::DRbUnknown

クラスの継承リスト: DRb::DRbUnknown < Object < Kernel < BasicObject

要約

リモートプロセスからマーシャリングされて送られてきたオブジェクトで、 そのクラスがローカルプロセス内では不明であるようなものを 表すクラス。

このクラスのインスタンス内部ではマーシャリングされたバイト列を 保持しています。DRB 経由で他のプロセスにこのオブジェクトを渡すと、 DRbUnknown オブジェクトではなくそのマーシャリングされたデータを 渡します。

クラス名/定数名は DRb::DRbUnknown#name で取得することができます。 DRb::DRbUnknown#buf で保持しているマーシャリングされた バイト列を得ることができます。

このクラスのインスタンスの使い道としては、オブジェクトの中継が考えられます。 A, B, C と3つのプロセスがあって、drb によって A <-> B <-> C と通信している とします。ここで A と C では定義されているが B では定義されていない クラスがあったとしましょう。A から B にマーシャリングされて オブジェクトが渡されると、B ではそのクラスの素性がわからないため DRbUnknown オブジェクトとして表現されます。 それを C に送ると、マーシャリングされたバイト列が C に送られ、 C ではそれを元のオブジェクトに復元することができます。 このように、中継プロセス B では中継するオブジェクトのクラスについて 知らなくとも正しく動作します。

目次

インスタンスメソッド
buf exception name reload

インスタンスメソッド

buf -> String[permalink][rdoc]

保持しているマーシャリングされたバイト列を返します。

exception -> DRb::DRbUnknownError[permalink][rdoc]

マーシャリングされたオブジェクトが元のオブジェクトに変換できなかった、 ということを意味する例外オブジェクトを返します。

この例外オブジェクトの DRb::DRbUnknownError#unknown を 呼び出すと、 self が返されます。

name -> String[permalink][rdoc]

保持しているマーシャリングされたオブジェクトのクラスの名前を返します。

reload -> object[permalink][rdoc]

保持しているマーシャリングされたオブジェクトをRubyのオブジェクトに 変換しようと試みます。

DRbUnknown オブジェクトを受け取った後に対応するクラスが定義された場合、 このメソッドでそのクラスのオブジェクトに変換できます。 変換を試みて失敗した場合は DRbUnknown オブジェクトを返します。