【问题标题】:Understanding string.gsub in Lua理解 Lua 中的 string.gsub
【发布时间】:2015-07-01 06:41:02
【问题描述】:

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


【解决方案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)

交互模式下的输出也将与预期一样。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 2014-11-15
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 2015-07-20
相关资源
最近更新 更多