Lua - 功能声明的变化

时间:2017-10-24 14:02:36

标签: function lua

我对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)

选择特定变体有什么影响吗?

2 个答案:

答案 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)