在 Lua 中了解 string.gsub

Understanding string.gsub in Lua

我正在尝试将 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

我错过了什么?

string.gsub 有两个 return 值。第一个是结果字符串,第二个是发生的匹配总数。

在你的例子中:

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

第二个 return 值是 1 因为替换发生了一次。

当您将结果分配为:

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

第一个 return 值分配给 replace_string,而第二个 return 值被丢弃。

您可以通过以下方式显式获取第二个 return 值:

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)

交互模式下的输出也将如预期。