了解Lua中的string.gsub

时间:2015-07-01 06:41:03

标签: string lua gsub

我正在尝试将gsub字符串(在Lua中)打印到stdout这里我的代码如何。

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

我错过了什么?

1 个答案:

答案 0 :(得分: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)

输出也将在交互模式中按预期进行。