我看到一个函数像
sigma = 3*e-2
svmTrain(...,@(X,y)gaussianKernel(X,y,sigma),...);
这样的函数传递是怎么回事,有人能解释一下吗?
我看到一个函数像
sigma = 3*e-2
svmTrain(...,@(X,y)gaussianKernel(X,y,sigma),...);
这样的函数传递是怎么回事,有人能解释一下吗?
该语法通过将这个现有函数的第三个参数具体绑定为 value 来@(X,y) gaussianKernel(X, y, sigma)
创建一个匿名函数。guassianKernel(X, y, s)
sigma
如果你检查svmTrain
函数签名,你会看到它允许传入一个函数,这就是这个匿名函数的去向。
这里发生了两件事:
首先是函数传递。例如,您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