1

我看到一个函数像

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

这样的函数传递是怎么回事,有人能解释一下吗?

4

2 回答 2

3

该语法通过将这个现有函数的第三个参数具体绑定为 value 来@(X,y) gaussianKernel(X, y, sigma)创建一个匿名函数guassianKernel(X, y, s)sigma

如果你检查svmTrain函数签名,你会看到它允许传入一个函数,这就是这个匿名函数的去向。

于 2012-10-03T13:14:07.233 回答
1

这里发生了两件事:

首先是函数传递。例如,您foo的代码中有一个函数,并且您想将它作为参数传递。在这种情况下,您使用@运算符。

function MainScript
    goo(@foo);     
end

function goo(fHandle)
    fHandle();
end

function foo
    disp('Hello world!');
end

第二个是匿名函数。匿名函数与其他所有函数非常相似,不同之处在于它是在运行时定义的,没有名称,并且它将传递给它的变量的本地副本绑定到自身。(有关更多信息,请参阅闭包)。例如:

 function MainScript
     foo = @() (disp('Hello world!'));
     goo(@foo);   
 end
于 2012-10-03T13:14:49.467 回答