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

WP0*_*987 2 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)
Run Code Online (Sandbox Code Playgroud)

这条线a = Account:new{balance = 0}是不是应该a = Account:new(balance = 0)用括号替换括号来写,因为它是一个函数?

Oka*_*Oka 5

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'); 也就是说,参数列表是单个文字字符串.