我看到一个像
一样传递的函数sigma = 3*e-2
svmTrain(...,@(X,y)gaussianKernel(X,y,sigma),...);
这样的功能传递是怎么回事,有人会解释一下吗?
答案 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