理解Lua中的string.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

我错过了什么?

点赞
用户1009479
用户1009479

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)

输出也将在交互模式下符合预期。

2015-07-01 06:49:30