似乎这种语法应该有效但不会:
> print "%i":format(42)
%i
[string "return print "%i":format(42)"]:1: attempt to index a nil value
这也失败了:
> print ("%i":format(42))
[string "print ("%i":format(42))"]:1: ')' expected near ':'
这种作品:
> print (("%i"):format(42))
42
=> [string "return print ("%i"):format(42)"]:1: attempt to index a nil value
有人可以解释发生了什么,并告诉我该怎么做?
(我知道string.format("%i", 42)
,但我正在尝试使用文档中显示的其他语法。)
编辑:进一步测试显示这部分是repl.it的问题。在本地运行解释器不会显示最后一个示例的任何错误。
答案 0 :(得分:2)
这与string.format
无关,它是Lua的一般语法特征:在复杂表达式的方法调用中,您需要将表达式括在括号中。
请参阅Lua BNF中的 prefixexp :
prefixexp ::= var | functioncall | ‘(’ exp ‘)’
functioncall ::= prefixexp args | prefixexp ‘:’ Name args