Ruby 为什么.each_char方法不替换指定的字符?
这是一个简单明了的问题。在下面的代码中,这应该用下划线替换指定的字符,但事实并非如此。我已经查看了这两个的文档。每个_char和.gsub以及这个组合都应该可以工作。为什么这段代码不起作用Ruby 为什么.each_char方法不替换指定的字符?,ruby,string,gsub,Ruby,String,Gsub,这是一个简单明了的问题。在下面的代码中,这应该用下划线替换指定的字符,但事实并非如此。我已经查看了这两个的文档。每个_char和.gsub以及这个组合都应该可以工作。为什么这段代码不起作用 string = "string" new_string =string.each_char do |char| if char == "i" string.gsub(/char/,"_") end end 放入新的字符串 上述代码应输出“stru_ing”。对吗?第一个问题是在正则表达式中
string = "string"
new_string =string.each_char do |char|
if char == "i"
string.gsub(/char/,"_")
end
end
放入新的字符串
上述代码应输出“stru_ing”。对吗?第一个问题是在正则表达式中使用
char
。您使用的char
不是变量,而是文本。第二个问题是在块内定义新字符串:
string = "string"
string.each_char do |char|
if char == "i"
new_string = string.gsub(/#{char}/,"_")
end
end
代码有几个地方出了问题 首先,正则表达式
/char/
查找的是文本字符char
,而不是变量的内容。您可能需要的是/#{char}/
,它计算char
并创建一个包含其内容的regexp
接下来,看看和之间的区别gsub
,这是您正在使用的,它会创建一个新字符串。在块内创建一个新字符串,但不要对其执行任何操作。它基本上被扔掉了
将每个字符产生到块后,返回原始字符串。该字符串在块中没有更改,因此在最后它是不变的。如果您使用了gsub
而不是gsub
您将看到您所期望的内容,因为原始字符串已更改
但是,不要这样做。一般来说,在对数据结构进行迭代时,不应该像这样操作它。在这种情况下,它可以正常工作,但这不是一个你应该养成的习惯。您无法确定您的操作将如何影响迭代,最终可能会出现意外的结果或错误
在这种情况下,您可以使用gsub代码>本身:
new_string.gsub!(/i/, '_')
谢谢你们,我想我现在拿到了。我感谢你的回答,尤其是解释。