Lua 中 s:format() 的特点

似乎这种语法应该可以工作,但是并不行:

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

点赞
用户107090
用户107090

这与 string.format 无关,它是 Lua 的一项通用语法特性:在对复杂表达式进行方法调用时,需要将表达式括在括号内。

请查看Lua BNF中的 prefixexp

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

```

2017-09-18 23:39:09