関数が次のように渡されるのがわかります
sigma = 3*e-2
svmTrain(...,@(X,y)gaussianKernel(X,y,sigma),...);
このような関数の受け渡しで何が起こっているのか、誰か説明してくれませんか?
関数が次のように渡されるのがわかります
sigma = 3*e-2
svmTrain(...,@(X,y)gaussianKernel(X,y,sigma),...);
このような関数の受け渡しで何が起こっているのか、誰か説明してくれませんか?
この構文は、この既存の関数の 3 番目の引数を明示的に value にバインドすることにより、無名関数@(X,y) gaussianKernel(X, y, sigma)
を作成します。guassianKernel(X, y, s)
sigma
関数のシグネチャを調べると、svmTrain
関数を渡すことが許可されていることがわかります。これは、この無名関数の行き先です。
ここでは2つのことが起こります。
1つ目は関数の受け渡しです。たとえば、foo
コードに関数があり、それをパラメーターとして渡したいとします。この場合、@
演算子を使用します。
function MainScript
goo(@foo);
end
function goo(fHandle)
fHandle();
end
function foo
disp('Hello world!');
end
2つ目は無名関数です。匿名関数は、実行時に定義され、名前がなく、渡される変数のローカルコピーをそれ自体にバインドすることを除いて、他のすべての関数とほとんど同じ関数です。(詳細については、「クロージャー」を参照してください)。例えば:
function MainScript
foo = @() (disp('Hello world!'));
goo(@foo);
end