将函数作为参数传递给另一个函数

时间:2012-10-03 13:09:53

标签: matlab

我看到一个像

一样传递的函数
sigma = 3*e-2
svmTrain(...,@(X,y)gaussianKernel(X,y,sigma),...);

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

2 个答案:

答案 0 :(得分:3)

语法@(X,y) gaussianKernel(X, y, sigma)通过将此现有函数guassianKernel(X, y, s)的第三个参数绑定到值sigma来创建anonymous function

如果你检查svmTrain函数签名,你会发现它允许传入一个函数,这就是这个匿名函数的用武之地。

答案 1 :(得分:1)

这里发生了两件事:

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

function MainScript
    goo(@foo);     
end

function goo(fHandle)
    fHandle();
end

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

第二个是匿名函数。匿名函数是一个与其他函数非常相似的函数,除了它在运行时定义,它没有名称,它将自身与传递给它的变量的本地副本绑定在一起。 (有关更多信息,请参阅Closure)。例如:

 function MainScript
     foo = @() (disp('Hello world!'));
     goo(@foo);   
 end