ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ハンドルを使用した関数の呼び出し

関数ハンドルを使用すると、実行できない関数にもアクセスできるようになります。たとえば、MATLAB® パスに存在しなくなった関数でも呼び出すことができます。また、その関数を定義するファイルの外部からもローカル関数を呼び出すことができます。

呼び出し構文

関数ハンドルを使用して関数を呼び出す構文は、関数を直接呼び出すときに使用するものと同じです。たとえば、以下のように関数 myFun を呼び出した場合、

[out1, out2, ...] = myFun(in1, in2, ...);

ハンドルを使用して同じようにそれを呼び出しますが、その場合ハンドル名を使用します。

fHandle = @myFun;
[out1, out2, ...] = fHandle(in1, in2, ...);

わずかな違いが 1 つあります。呼び出される関数に入力引数がない場合は、次のように、ハンドル名の後ろに空の丸かっこを記述して関数を呼び出さなければなりません。ハンドル名のみを使用すると、MATLAB では関数の名前しか識別されません。

% This identifies the handle.       % This invokes the function.

fHandle = @computer;                fHandle = @computer;
fHandle                             fHandle()
ans =                               ans =
   @computer                           PCWIN

出力が複数ある関数の呼び出し

次の例では、無名関数の呼び出しから複数の値が返されます。配列のゼロ以外の要素の位置を示す無名関数 f を作成し、変数 rowcolval に各要素の行、列、値を返します。

f = @(X)find(X);

関数ハンドル f を使用して、行列 m に対して関数を呼び出します。この関数では 3 つまでの出力を返す MATLAB 関数 find を使用しているので、呼び出しにおいて 0 個 (出力なし) から 3 個までの出力を指定できます。

m = [3 2 0; -5 0 7; 0 0 1]
m =
     3     2     0
    -5     0     7
     0     0     1

[row col val] = f(m);

val
val =
     3
    -5
     2
     7
     1

関数ファイルの外で使用するハンドルを返す

前述したとおり、関数ハンドルは隠れている関数やスコープ外の関数の呼び出しに使用できます。この例では、関数 getHandle は、ファイルの外にある呼び出し側に対して関数ハンドル fHandle を返します。

function fHandle = getHandle
fHandle = @subFun;

function res = subFun(t1, t2, varargin);
...

関数 getHandle を呼び出して、ローカル関数の呼び出しに使用する関数ハンドルを取得します。これで、スコープ内にある関数の呼び出しと同様にローカル関数を呼び出すことができます。

f1 = getHandle;
result = f1(startTime, endTime, procedure);

例 — 最適化における関数ハンドルの使用

関数ハンドルは、最適化作業で非常に役に立ちます。MathWorks® Optimization Toolbox™ をインストールしている場合は、以下の任意のリンクをクリックしてこのトピックに関する情報と例を見つけてください。

この情報は役に立ちましたか?