Lua quirk with s:format()

时间:2017-09-18 23:01:27

标签: lua

似乎这种语法应该有效但不会:

> 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的问题。在本地运行解释器不会显示最后一个示例的任何错误。

1 个答案:

答案 0 :(得分:2)

这与string.format无关,它是Lua的一般语法特征:在复杂表达式的方法调用中,您需要将表达式括在括号中。

请参阅Lua BNF中的 prefixexp

prefixexp ::= var | functioncall | ‘(’ exp ‘)’
functioncall ::=  prefixexp args | prefixexp ‘:’ Name args