関数ハンドルの比較
名前付き関数から作成されたハンドルの比較
MATLAB® では、同じ名前の関数から作成された関数ハンドルは等しいものと見なされます。関数 isequal でこのようなタイプのハンドルを比較すると、true
の値が返されます。
fun1 = @sin; fun2 = @sin; isequal(fun1,fun2)
ans = logical 1
これらのハンドルを MAT ファイルに保存し、ワークスペースに再度読み込んでも、やはり等しくなります。
無名関数のハンドルの比較
名前付き関数へのハンドルとは異なり、同じ無名関数を表す関数ハンドル同士は等しくありません。MATLAB では、引数ではない変数の固定値が同じであることを保証できないので、等しくないと見なされます。次の例では、A が引数ではない変数です。
A = 5; h1 = @(x)A * x.^2; h2 = @(x)A * x.^2; isequal(h1,h2)
ans = logical 0
無名関数のハンドルのコピーを作成すると、コピーとオリジナルは等しくなります。
h1 = @(x)A * x.^2; h2 = h1; isequal(h1,h2)
ans = logical 1
入れ子関数のハンドルの比較
MATLAB は、コードが、入れ子関数を含む関数への同一の呼び出しに対してハンドルを作成した場合に限り、同じ入れ子関数への関数ハンドルを等しいものと見なします。次の関数は同じ入れ子関数に対して 2 つのハンドルを作成します。
function [h1,h2] = test_eq(a,b,c) h1 = @findZ; h2 = @findZ; function z = findZ z = a.^3 + b.^2 + c'; end end
同じ入れ子関数から、親関数への同じ呼び出しにおいて作成された関数ハンドルは、等しいものと見なされます。
[h1,h2] = test_eq(4,19,-7); isequal(h1,h2)
ans = logical 1
異なる呼び出しから作成される関数ハンドルは、等しいものとは見なされません。
[q1,q2] = test_eq(4,19,-7); isequal(h1,q1)
ans = logical 0