8

質問: Matlab では、関数ハンドルが特定の関数または関数型であるかどうかを確認するにはどうすればよいですか?

例:関数f1ハンドルとします。f1組み込みの Matlab 関数かどうかを確認するにはどうすればよいmeanですか? f1匿名関数かどうかを確認するにはどうすればよいですか?

私の現在の解決策:この問題に対する私の現在の解決策には、関数の呼び出しが含まれfunctionsます。functions関数ハンドルを入力として受け入れ、関数タイプ、パス、関数名など、入力関数ハンドルに関する情報を含む構造体を返します。これは機能しますが、公式ドキュメントを引用するため、理想的なソリューションではありません。

「注意 MATLAB® は、functionsクエリとデバッグの目的でのみ関数を提供します。その動作は後続のリリースで変更される可能性があるため、プログラミング目的で依存しないでください。」

4

1 に答える 1

11

func2str を使用するのはどうですか。

これが組み込み関数の場合は、関数名を含む文字列を返すだけです。匿名関数の場合は、匿名関数 (@ を含む) を返す必要があります。

h1 = @(x) x.^2;
h2 = @mean;
str1 = func2str(h1);  %str1 = "@(x) x.^2"
str2 = func2str(h2);  %str2 = "mean"

isequal を使用して 2 つの関数ハンドルを比較することもできます (ETA: これは、一方が他方のコピーとして作成されていない限り、2 つの無名関数を比較するために機能しません)。

isequal(h1,@mean);  % returns 0
isequal(h2,@mean);  % returns 1
于 2013-08-12T09:51:54.023 に答える