2017-09-18 35 views
1

看起來這句法應該工作,但不會:Lua的怪癖與S:格式()

> 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.問題在本地運行解釋器不會在最後一個示例中顯示任何錯誤。

回答

2

這與string.format無關,它是Lua的一般語法功能:在複雜表達式的方法調用中,需要將表達式括在圓括號中。

看到Lua BNFprefixexp

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