Octave 中的函数句柄定义如下示例。
f = @sin;
从现在开始,调用函数
f(x)
与调用 sin(x)
效果相同。到现在为止还挺好。我的问题始于我的一项编程任务中的以下功能。function sim = gaussianKernel(x1, x2, sigma)
上面的行代表函数
gaussianKernel
的标题。这需要三个变量作为输入。但是,下面的调用让我感到困惑,因为它在引用 gaussianKernel
时只传递了两个变量,然后传递了三个变量。model = svmTrain(X, y, C, @(x1, x2) gaussianKernel(x1, x2, sigma));
那不应该只是
model = svmTrain(X, y, C, @gaussianKernel(x1, x2, sigma));
吗?有什么区别? 最佳答案
您没有提供周围的代码,但我的猜测是变量 sigma
是在调用 model = svmTrain(X, y, C, @(x1, x2) gaussianKernel(x1, x2, sigma));
之前在代码中定义的。它是 parametrized anonymous function 的一个示例,它捕获当前作用域中的变量值。这也称为 closure 。看起来 Matlab 有 better documentation 这个非常有用的编程模式。
函数句柄 @gaussianKernel(x1, x2, sigma)
等价于 @gaussianKernel
。如果需要 model = svmTrain(X, y, C, @gaussianKernel(x1, x2, sigma));
的第四个参数是具有两个输入参数的函数,则在这种情况下使用 svmTrain
可能不起作用。
关于matlab - Octave 中的函数句柄格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45887813/