2015-07-01 77 views
0

我試圖在這裏打印gsub字符串(在Lua中)到stdout,這裏是我的代碼的樣子。瞭解Lua中的string.gsub

print('string.gsub(\'VEECTORY\',\'EE\',\'I\') =>', string.gsub('VEECTORY','EE','I')) 

每次我運行這個,雖然我得到了想要的結果,但我看到1出現在輸出。

所以,輸出看起來像這樣。

string.gsub('VEECTORY','EE','I') =>  VICTORY 1 

我無法理解那有什麼1代表,但如果我用一個變量我不認爲這1了。

local replace_string = string.gsub('VEECTORY','EE','I') 

print('string.gsub(\'VEECTORY\',\'EE\',\'I\') =>',replace_string) 

我得到的輸出

string.gsub('VEECTORY','EE','I') =>  VICTORY 

我也注意到,當我運行在Lua控制檯 上面的代碼,即該代碼

local replace_string = string.gsub('VEECTORY','EE','I') 

print('string.gsub(\'VEECTORY\',\'EE\',\'I\') =>',replace_string) 

我得到的輸出nil

enter image description here

我錯過了什麼?

+3

你在開玩笑嗎?你有沒有讀過有關語言及其圖書館的內容? http://www.lua.org/pil/contents.html - Lua指南; http://lua-users.org/wiki/StringLibraryTutorial - Lua字符串tutorail。 Gosh ... –

回答

1

string.gsub有兩個返回值。第一個是結果字符串,第二個是發生的匹配總數。

在您的例子:

string.gsub('VEECTORY','EE','I') 

第二返回值是1因爲替代發生過一次。

當指定結果爲:

local replace_string = string.gsub('VEECTORY','EE','I') 

第一返回值分配給replace_string,而第二返回值被丟棄。

您可以通過明確的將第二返回值:

local replace_string, num = string.gsub('VEECTORY','EE','I') 

最後,在交互模式下,每一行是一個塊本身,所以局部變量超出範圍的下一行,因此你看到replace_string變成nil。如果使用全局變量:

replace_string = string.gsub('VEECTORY','EE','I') 
print('string.gsub(\'VEECTORY\',\'EE\',\'I\') =>',replace_string) 

在交互模式下輸出也如預期。

+0

可以解釋你的意思是'每一行都是塊,所以局部變量超出了下一行的範圍' – Ratatouille

+0

@Ratatouille [PiL 4.2 - 局部變量和塊](http:// www。 lua.org/pil/4.2.html)。 –

+0

發現它感謝 – Ratatouille