1

関数が次のように渡されるのがわかります

sigma = 3*e-2
svmTrain(...,@(X,y)gaussianKernel(X,y,sigma),...);

このような関数の受け渡しで何が起こっているのか、誰か説明してくれませんか?

4

2 に答える 2

3

この構文は、この既存の関数の 3 番目の引数を明示的に value にバインドすることにより、無名関数@(X,y) gaussianKernel(X, y, sigma)を作成します。guassianKernel(X, y, s)sigma

関数のシグネチャを調べると、svmTrain関数を渡すことが許可されていることがわかります。これは、この無名関数の行き先です。

于 2012-10-03T13:14:07.233 に答える
1

ここでは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
于 2012-10-03T13:14:49.467 に答える