在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)
Run Code Online (Sandbox Code Playgroud)
这条线a = Account:new{balance = 0}是不是应该a = Account:new(balance = 0)用括号替换括号来写,因为它是一个函数?
Account:new { balance = 0 }是语法糖Account:new({ balance = 0 }).
这是,如果传递给函数的唯一参数是表构造函数或字符串文字,则可以省略括号.
你会看到最常见的地方是require:
local env = require 'env'
Run Code Online (Sandbox Code Playgroud)
这在Lua参考手册的§3.4.10中Function Calls讨论:
形式的调用
f{fields}是语法糖f({fields}); 也就是说,参数列表是一个新表.形式f'string'(或f"string"或f[[string]])的调用是语法糖f('string'); 也就是说,参数列表是单个文字字符串.