在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)
,括号替换为括号,因为它是一个函数?
答案 0 :(得分:5)
Account:new { balance = 0 }
是Account:new({ balance = 0 })
的语法糖。
这是,如果传递给函数的唯一参数是表构造函数或字符串 literal ,则可以省略括号。
您会看到最常见的地方与require
一致:
local env = require 'env'
§3.4.10 – Function Calls
的Lua Reference Manual中讨论了这一点:
f{fields}
形式的调用是f({fields})
的语法糖;也就是说,参数列表是一个新表。f'string'
(或f"string"
或f[[string]]
)表单的调用是f('string')
的语法糖;也就是说,参数列表是单个文字字符串。