我看到一个函数像这样传递
sigma = 3*e-2
svmTrain(...,@(X,y)gaussianKernel(X,y,sigma),...);这样的函数传递是怎么回事,有人能解释一下吗?
发布于 2012-10-03 21:14:07
语法@(X,y) gaussianKernel(X, y, sigma)通过将此现有函数guassianKernel(X, y, s)的第三个参数绑定为值sigma来创建一个anonymous function。
如果您检查svmTrain函数签名,您将看到它允许传入一个函数,这就是这个匿名函数的目标。
发布于 2012-10-03 21:14:49
这里会发生两件事:
首先是函数传递。例如,您的代码中有一个函数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);
endhttps://stackoverflow.com/questions/12709226
复制相似问题