オブジェクト コンバーター
コンバーターを実装する理由
あるクラスのオブジェクトを他のクラスのオブジェクトに変換することができます。コンバーター メソッドは、char
または double
など、変換先のクラスと同じ名前をもちます。コンバーター メソッドを、他のクラスのオーバーロードされたコンストラクター メソッドとして考えます。コンバーターは、それ自体のクラスのインスタンスを受け取り、異なるクラスのオブジェクトを返します。
変換により、次のことが可能になります。
他クラスの定義メソッドの使用
複数のクラス タイプが混在するオブジェクトを含む式の適切な実行の確保
他コンテキストにおけるインスタンス解釈のコントロール
polynomial
クラスを定義するとします。polynomial
クラスに対して double
メソッドを作成すると、double
型の入力が必要となる他の関数の呼び出しに使用できます。
p = polynomial(...); dp = double(p); roots(dp)
p
は多項式オブジェクトであり、double
は polynomial
クラスのメソッドです。roots
は、入力引数が多項式の係数である、標準の MATLAB® 関数です。
パッケージ クラスのコンバーター
パッケージで定義されたクラスには、ドット区切りの名前リストで名前を指定できます。後ろの名前がクラスで、前の名前がパッケージです。メソッド名にパッケージ修飾子を使用して変換メソッドに名前を付けます。たとえば、MyClass
のオブジェクトを PkgName.PkgClass
クラスのオブジェクトに変換する変換メソッドでは、次のメソッド名を使用します。
classdef MyClass ... methods function objPkgClass = PkgName.PkgClass(objMyclass) ... end end end
名前にドットを使用するコンバーター メソッドを別のファイルで定義することはできません。パッケージクラス コンバーターは classdef
ファイルで定義してください。
コンバーターと添字を使った代入
次のような、添字を使った代入ステートメントを作成するとします。
A(1) = myobj;
MATLAB は右辺の変数のクラスを左辺の変数のクラスと比較します。クラスが異なる場合、MATLAB は右辺の変数を左辺の変数のクラスに変換するように試みます。この変換を行うために、MATLAB はまず、左辺のクラスと同じ名前をもつ右辺のクラスのメソッドを探します。そういったメソッドはコンバーター メソッドであり、これは他言語で言う型変換操作に似たものです。
右辺のクラスで、右辺のクラスから左辺のクラスへ変換するメソッドが定義されていない場合、MATLAB は左辺のクラス コンストラクターを呼び出して右辺の変数に渡します。
たとえば、以下の割り当てをするものとします。
A(1) = objA; A(2) = objB;
MATLAB は ClassA
という名前の ClassB
のメソッドを呼び出そうとします。そのようなコンバーター メソッドが存在しない場合、MATLAB は ClassA
コンストラクターを呼び出し、objB
を引数として渡します。ClassA
コンストラクターが objB
を引数として受け取ることができない場合、MATLAB はエラーを返します。
異なるクラスのオブジェクトを保存するには、配列 cell
を使用します。
異種混合配列のコンバーター
異種混合階層の一部ではないオブジェクトを使用した異種混合配列の形成をサポートするには、ルート スーパークラスに convertObject
メソッドを実装してください。convertObject
メソッドは、非メンバーのオブジェクトを異種混合階層の有効なメンバーに変換しなければなりません。
convertObject
メソッドの実装の詳細については、matlab.mixin.Heterogeneous
を参照してください。