Programming and Data Types | ![]() ![]() |
メソッド選択手順
同じ名前をもつ種々のバージョンが存在する場合に、その一つを呼び込む場合、MATLABはつぎの方法でメソッドを決めます。
Dispatchタイプの決定
MATLABは、まず、メソッド選択をコントロールする引数を決定します。この引数 のクラスタイプが、MATLABが探索するメソッドの入っているクラスを決定します。 コントロールされる引数は、つぎのいずれかです。
ユーザ定義のオブジェクトは、double
やchar
のようなMATLABの組み込みのクラスよりも上に順位を設定できます。"オブジェクトの優先順位"に示されるように、関数inferiorto
やsuperiorto
を使って、ユーザ定義のオブジェクトの相対的な優先順位の設定できます。
MATLABは名前を使って関数を探索します。関数を読み込むと、MATLABは、名前、引数の数、各引数のタイプを理解します。MATLABは、同じ名前で設定された複数の関数の中から選択に、ディスパッチタイプを使います。しかし、引数の数は考慮しません。
関数の優先順位
関数の優先順位は、関数のタイプとMATLABパス上での位置をベースにして、ある 関数が他の関数よりも高い順位であるかの決定ができます。メソッド選択の全体 を見ると、MATLABは二つのタイプの関数を含んでいます。すなわち、MATLABの中 に組み込まれたものと、M-ファイルで記述されたものです。MATLABは、関数の優 先順位を決定するときに、これら二つのタイプを別々に取り扱います。
MATLABは、つぎの関数優先則を適用することにより、与えられた内容に対する正しい関数を選択します。
MATLAB組み込み関数は、サブ関数やプライベート関数よりも優先順位が高いものです。そのため、MATLAB組み込み関数と同名のサブ関数やプライベート関数は、呼び出されません。
サブ関数は、パス上にある同じ名前のすべてのM-ファイル関数や多重定義されたメソッドよりも優先順位が高いものです。関数が多重定義されたメソッドと一致する引数のタイプを使って呼び出されても、MATLABはサブ関数を使い、多重定義メソッドを無視します。
プライベート関数は、カレントの範囲内に同名のサブ関数がない場合に呼び出されます。サブ関数と同様に、関数が多重定義されたメソッドと一致する引数のタイプを使って呼び出されても、MATLABはプライベート関数を使い、多重定義メソッドを無視します。
コンストラクタ関数(@ディレクトリ、たとえば、@polynom/polynom.m
と同じ名前をもつ関数)は、他のMATLAB関数よりも優先順位が上です。そのため、polynom.m
と呼ばれるM-ファイルを作成し、コンストラクタ@polynom/polynom.m
バージョンの前になるようにパスを設定すると、MATLABは、コンストラクタバージョンを呼びます。
複数のディレクトリからの選択
同じ名前をもったメソッドを含むパス上にいくつかのディレクトリがあります。 MATLABは、パス上にメソッドの最初の実現が検出された場合に、実現のタイプ (MEX-ファイル、P-コード、M-ファイル)に拘わらず、探索を終了します。
複数の実現タイプからの選択
四つのファイル優先タイプがあります。MATLABは同じディレクトリ内に同じ名前 をもつ関数間で選択する場合、ファイル優先を選択します。ファイルタイプに対 する優先順位は、
たとえば、MATLABが、あるクラスの中で、あるメソッドのP-コードとM-ファイ ルバージョンを探索すると、P-コードバージョンが使われます。そのため、ユー ザがM-ファイルがエディットすると、P-コードを再度作成することが重要です。
![]() |
MATLABがメソッドを読み込む優先順位の決定法 | MATLABが読み込むメソッドの引用 | ![]() |