【发布时间】:2017-09-11 10:03:30
【问题描述】:
编辑:我最初的问题与我的实际问题无关,但当我在此过程中学到一些东西时,我决定改写我最初的陈述。
我想用字符串中的一对括号内的_ 替换每个空格。这是我的示例输入:
This is my string (nice, isn't it?). It can have various types [of input].
期望的输出:
This is my string (nice,_isn't_it?). It can have various types [of_input].
我有以下代码:
my_string = my_string.gsub(/\([^\(\)]+\)|\[[^\[\]]+\]/) { |bracketed|
bracketed.gsub(/ /, '_')
}
为什么bracketed.gsub(/ /, '_') 等于bracketed = bracketed.gsub(/ /, '_')?这与gsub! 有何不同?我不完全理解 Ruby 假设在这里返回什么背后的逻辑。
【问题讨论】:
-
它会生成你想要的输出。什么不起作用?
-
还有改进的余地,但您的代码运行良好。它已经达到了预期的输出。
-
即您可以将代码简化为:
my_string.gsub(/\([^)]+\)|\[[^\]]+\]/) { |bracketed| bracketed.tr(' ', '_') }...但是您的版本已经可以使用了吗?? -
@TomLord 我怀疑 OP 想了解为什么这里不需要使用
return,Ruby 如何从块内修改my_string。所以,问题实际上并不是关于正则表达式,而是关于一般的块。 -
@MrVocabulary 正如我上面所展示的,您甚至不需要将
bracketed =放入块中!块(或任何方法)的最后一行是ruby中的隐式响应值。