Programming and Data Types    

メソッド選択手順

同じ名前をもつ種々のバージョンが存在する場合に、その一つを呼び込む場合、MATLABはつぎの方法でメソッドを決めます。

Dispatchタイプの決定

MATLABは、まず、メソッド選択をコントロールする引数を決定します。この引数 のクラスタイプが、MATLABが探索するメソッドの入っているクラスを決定します。 コントロールされる引数は、つぎのいずれかです。

ユーザ定義のオブジェクトは、doublecharのようなMATLABの組み込みのクラスよりも上に順位を設定できます。"オブジェクトの優先順位"に示されるように、関数inferiortosuperiorto を使って、ユーザ定義のオブジェクトの相対的な優先順位の設定できます。

MATLABは名前を使って関数を探索します。関数を読み込むと、MATLABは、名前、引数の数、各引数のタイプを理解します。MATLABは、同じ名前で設定された複数の関数の中から選択に、ディスパッチタイプを使います。しかし、引数の数は考慮しません。

関数の優先順位

関数の優先順位は、関数のタイプとMATLABパス上での位置をベースにして、ある 関数が他の関数よりも高い順位であるかの決定ができます。メソッド選択の全体 を見ると、MATLABは二つのタイプの関数を含んでいます。すなわち、MATLABの中 に組み込まれたものと、M-ファイルで記述されたものです。MATLABは、関数の優 先順位を決定するときに、これら二つのタイプを別々に取り扱います。

MATLABは、つぎの関数優先則を適用することにより、与えられた内容に対する正しい関数を選択します。

組み込み関数に対して:

  1. 多重定義されたメソッド

    MATLAB組み込み関数と同じ名前をもつdispatch引数のクラスディレクトリの中にメソッドが存在する場合、このメソッドは、組み込み関数の代わりに呼び込まれます。

  1. 多重定義されていないMATLAB関数

    多重定義されていないメソッドの場合、MATLAB組み込み関数が呼び込まれます。

MATLAB組み込み関数は、サブ関数やプライベート関数よりも優先順位が高いものです。そのため、MATLAB組み込み関数と同名のサブ関数やプライベート関数は、呼び出されません。

非組み込み関数

  1. サブ関数

    サブ関数は、パス上にある同じ名前のすべてのM-ファイル関数や多重定義されたメソッドよりも優先順位が高いものです。関数が多重定義されたメソッドと一致する引数のタイプを使って呼び出されても、MATLABはサブ関数を使い、多重定義メソッドを無視します。

  1. プライベート関数

    プライベート関数は、カレントの範囲内に同名のサブ関数がない場合に呼び出されます。サブ関数と同様に、関数が多重定義されたメソッドと一致する引数のタイプを使って呼び出されても、MATLABはプライベート関数を使い、多重定義メソッドを無視します。

  1. クラスコンストラクタ関数

    コンストラクタ関数(@ディレクトリ、たとえば、@polynom/polynom.mと同じ名前をもつ関数)は、他のMATLAB関数よりも優先順位が上です。そのため、polynom.mと呼ばれるM-ファイルを作成し、コンストラクタ@polynom/polynom.mバージョンの前になるようにパスを設定すると、MATLABは、コンストラクタバージョンを呼びます。

  1. 多重定義されたメソッド

    MATLABは、サブ関数、または、プライベート関数でマスク されていなければ、多重定義されたメソッドと言います。

  1. カレントディレクトリ

    カレントワーキングディレクトリの中の関数は、パス 上のある位置の前に選択されます。

  1. パス上の位置

    最終的に、あるパス上の任意の関数が選択されます。

複数のディレクトリからの選択

同じ名前をもったメソッドを含むパス上にいくつかのディレクトリがあります。 MATLABは、パス上にメソッドの最初の実現が検出された場合に、実現のタイプ (MEX-ファイル、P-コード、M-ファイル)に拘わらず、探索を終了します。

複数の実現タイプからの選択

四つのファイル優先タイプがあります。MATLABは同じディレクトリ内に同じ名前 をもつ関数間で選択する場合、ファイル優先を選択します。ファイルタイプに対 する優先順位は、

  1. MEX-ファイル
  2. MDL-ファイル (Simulink モデル)
  3. P-コード
  4. M-ファイル

たとえば、MATLABが、あるクラスの中で、あるメソッドのP-コードとM-ファイ ルバージョンを探索すると、P-コードバージョンが使われます。そのため、ユー ザがM-ファイルがエディットすると、P-コードを再度作成することが重要です。


  MATLABがメソッドを読み込む優先順位の決定法 MATLABが読み込むメソッドの引用