オブジェクト コンバーター
コンバーターを実装する理由
あるクラスのオブジェクトを他のクラスのオブジェクトに変換することができます。コンバーター メソッドは、char または double など、変換先のクラスと同じ名前をもちます。コンバーター メソッドを、他のクラスのオーバーロードされたコンストラクター メソッドとして考えます。コンバーターは、それ自体のクラスのインスタンスを受け取り、異なるクラスのオブジェクトを返します。
変換により、次のことが可能になります。
他クラスの定義メソッドの使用
複数のクラス タイプが混在するオブジェクトを含む式の適切な実行の確保
他コンテキストにおけるインスタンス解釈のコントロール
polynomial クラスを定義するとします。polynomial クラスに対して double メソッドを作成すると、double 型の入力が必要となる他の関数の呼び出しに使用できます。
p = polynomial(...); dp = double(p); roots(dp)
p は多項式オブジェクトであり、double は polynomial クラスのメソッドです。roots は、入力引数が多項式の係数である、標準の MATLAB® 関数です。
名前空間クラスのコンバーター
名前空間で定義されたクラスには、ドット区切りの名前リストで名前を指定できます。後ろの名前がクラスで、前の名前が名前空間です。メソッド名に名前空間修飾子を使用して変換メソッドに名前を付けます。たとえば、MyClass のオブジェクトを nsp.NspClass クラスのオブジェクトに変換する変換メソッドでは、次のメソッド名を使用します。
classdef MyClass ... methods function objNspClass = nspname.NspClass(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 を参照してください。