我对Lua很陌生并且对如何声明函数感到有些困惑。
这两种变化似乎有效: -
第一个版本
test = {calc = function (x,y)
z = x + y
return z
end
}
result = test.calc (1,2)
print (result)
第二种变化
test = {}
function test.calc(x,y)
z = x + y
return z
end
result = test.calc (1,2)
print (result)
选择特定变体有什么影响吗?
答案 0 :(得分:1)
它们具有完全相同的效果。根据可读性选择一个或另一个。 (我更喜欢第二个。)
答案 1 :(得分:0)
Lua没有函数声明。它有函数定义,它是表达式(第一个变体),在运行时计算时产生函数值。其他语法形式实际上是函数定义表达式和赋值的组合。
在第3个变体中,加上隐含的第1个参数self
。它旨在用于字段上的“方法调用”。方法调用只是函数调用的一种替代形式,它将保存字段的表值(函数值)作为隐式的第一个参数传递,因此函数可以引用它,尤其是访问其他字段。
第三种变化:方法
local test = { history = {} }
function test:calc(x,y)
local z = x + y
table.insert(self.history, { x = x, y = y })
return z
end
print(test.calc)
local result = test:calc(1,2)
print(result)
print(test.history[1].x, test.history[1].y)