method_missing(name, *args) -> objectRuby 3.0 から[permalink][rdoc][edit]-
VT_RECORD OLE変数のメンバ名に対応する値を取得、または設定します。
引数がnameだけの場合(
book.titleのようにgetterとして未定義メソッドが呼び出された場合)はメンバの値を取得します。引数がname、valの2つの場合(book.title = "..."のようにsetterとして未定義メソッドが呼び出された場合)は、nameの末尾の「=」を取り除いたメンバ名にvalを設定します。指定したメンバ名が存在しない場合はKeyErrorが発生します。- [PARAM]
name: - アクセスするメンバ名に対応するメソッド名(シンボル)です。 setterの場合は末尾に「=」が付きます。
- [PARAM]
args: - setterとして呼び出された場合、設定する値を1つ指定します。 getterとして呼び出された場合は空です。
- [RETURN]
- getterとして呼び出された場合はメンバの値、setterとして呼び出された場合は設定した値を返します。
- [EXCEPTION]
KeyError: - 指定したメンバ名がselfに存在しません。
VB.NETのComServerプロジェクトで作成したCOMサーバの以下のBook構造体に対して、
Imports System.Runtime.InteropServices Public Class ComClass Public Structure Book <MarshalAs(UnmanagedType.BStr)> _ Public title As String Public cost As Integer End Structure End Class値の取得・設定は次のようにメンバ名をメソッドとして呼び出すことで行います(実際には、method_missingが呼び出されます)。
例obj = WIN32OLE.new('ComServer.ComClass') book = WIN32OLE_RECORD.new('Book', obj) book.title # => nil ( book.method_missing(:title) が呼び出される ) book.title = "Ruby" # ( book.method_missing(:title=, "Ruby") が呼び出される )[SEE_ALSO] WIN32OLE_RECORD#ole_instance_variable_get, WIN32OLE_RECORD#ole_instance_variable_set
- [PARAM]