返回函数如何在Lua中工作?我试着理解这个导数函数,但是我很难理解。
function derivative(f, delta)
delta = delta or 1e-4
return function(x)
return (f(x + delta) - f(x))/delta
end
end
先看这里
简单地说,函数是一等公民,您可以将它们存储在变量中并从函数返回。
。在您的示例中,要创建一个闭包。它将具有f和delta的上值,可用于内部函数。
所以当你调用你的导数函数时,新的闭包将被创建为f和的副本。以后你可以像调用其他函数一样调用它
local d = derivative(f, 1e-6)
d(10)
EDIT: "回答上,但我有困难理解如何在匿名函数中处理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匹配。在第三个例子中,1将被分配给x1, 2分配给x2, 3将被丢弃。在变量函数smth的term中,像这样执行
function a(...)
local x1 = (...)[1]
local x2 = (...)[2]
// Body
end
在您的示例中,x
被视为内部函数参数,将在其内部可见,并在调用内部函数实例时初始化。
f
和delta
对于每个函数实例都是唯一的,正如我上面提到的。
希望我笨拙的解释能达到他们的目的,并对你有所帮助。