返回功能如何在Lua中运行?我试图绕过这个衍生函数,但我无法理解它。
function derivative(f, delta)
delta = delta or 1e-4
return function(x)
return (f(x + delta) - f(x))/delta
end
end
感谢任何帮助,谢谢。
答案 0 :(得分:3)
首先see here。
很快,函数就是一等公民,你可以将它们存储在变量中并从函数中返回。
二。在您的示例中,有一个要创建的闭包。它将具有up值f和delta,可用于内部函数。
因此,当您调用衍生函数时,将使用f和delta的副本创建新的闭包。你可以像其他任何函数一样调用它
local d = derivative(f, 1e-6)
d(10)
编辑:“回答但我无法理解在我的示例中匿名函数中如何处理x参数”
每个函数都有一个签名,多个正式属性,它会得到。 在Lua中,您可以使用任意数量的参数调用函数。我们来看一个例子。
local a = function(x1, x2) print(x1, x2) end
a(1) // 1, nil
a(1, 2) // 1, 2
a(1, 2, 3) // 1, 2
当您在变量a
中调用函数时,每个给定的参数值将逐个与函数argumentList匹配。在第3个示例中,1将分配给x1,2到x2,3将被丢弃。在vararg函数的术语中,就像这样执行。
function a(...)
local x1 = (...)[1]
local x2 = (...)[2]
// Body
end
在您的示例中,x
被视为内部函数参数,在其中可见,并在您调用内部函数实例时初始化。
f
和delta
对每个函数实例都是唯一的。
希望我的笨拙解释会达到他们的目标,并帮助你一点点。