在Lua中,a = Account:new {balance = 0}是如何工作的还是错字?

时间:2016-11-06 23:48:00

标签: lua

在Lua网站https://www.lua.org/pil/16.1.html上,有这段代码

function Account:new (o)
  o = o or {}   -- create object if user does not provide one
  setmetatable(o, self)
  self.__index = self
  return o
end

a = Account:new{balance = 0}
a:deposit(100.00)

不应将行a = Account:new{balance = 0}写为a = Account:new(balance = 0),括号替换为括号,因为它是一个函数?

1 个答案:

答案 0 :(得分:5)

Account:new { balance = 0 }Account:new({ balance = 0 })的语法糖。

这是,如果传递给函数的唯一参数是表构造函数或字符串 literal ,则可以省略括号。

您会看到最常见的地方与require一致:

local env = require 'env'

§3.4.10 – Function CallsLua Reference Manual中讨论了这一点:

  

f{fields}形式的调用是f({fields})的语法糖;也就是说,参数列表是一个新表。 f'string'(或f"string"f[[string]])表单的调用是f('string')的语法糖;也就是说,参数列表是单个文字字符串。