Programming and Data Types | ![]() ![]() |
関数ハンドル演算
MATLABは、関数ハンドルと関数名の文字列と間で、変換を行なう2つの関数を用意しています。変数が関数ハンドルを保持しているかを調べるテスト用の関数も用意していて、関数ハンドルを比較することもできます。
関数ハンドルを関数名に変換
文字の比較や表示のような文字演算を、関数ハンドルで行なう必要がある場合、文字列フォーマットの中の関数名を得るために、func2str
を使うことができます。
関数ハンドルsin
を文字列に変換するには、つぎのようにします。
fhandle = @sin; func2str(fhandle) ans = sin
例題 - エラーメッセージの中の関数名表示
ここで示す関数 catcherr
は、関数ハンドルとデータ引数を受け入れ、そのハンドルを使って、関数を計算しようとします。関数が計算の実行に失敗すると、catcherr
は、sprintf
を使って、原因の関数の名前を与えるエラーメッセージを表示します。関数名は、それを表示するために、sprintf
用の文字列でなければなりません。コードは、func2str
を使って、関数ハンドルから関数名を引き出します。
function catcherr(func, data) try ans = feval(func, data); disp('Answer is:'); ans catch sprintf('Error executing function ''%s''\n', func2str(func)) end
下に示すように、catcherr
への最初のコールは、ハンドルをround
と正しいデータ引数に渡します。これは、正しいコールになり、期待した答えを出力します。二番目のコールは、同じ関数ハンドルと不適切なデータタイプ(MATLAB構造体)を渡します。このとき、round
は失敗して、失敗の原因の関数名を含むエラーメッセージの表示をcatcherr
を使って行ないます。
catcherr(@round, 5.432) ans = Answer is 5 xstruct.value = 5.432; catcherr(@round, xstruct) Error executing function "round"
![]() |
関数ハンドルのタイプ | 関数名を関数ハンドルに変換 | ![]() |