replace
改变当前字符串而不是返回新实例。为了与Ruby中的其他方法保持一致,似乎应该调用replace!
这是一个错误/不一致还是我错过了什么?
答案 0 :(得分:4)
来自matz的帖子https://www.ruby-forum.com/topic/176830#773946
爆炸(!)并不意味着“破坏性”,也不缺乏意味着非破坏性 破坏性的。爆炸标志意味着“爆炸版本更多 比非爆炸对手更危险;谨慎处理“。自从 Ruby有很多“破坏性”的方法,如果爆炸标志跟随你的话 意见,每个Ruby程序都会充满爆炸,因此很难看。
所以最初的问题来自对爆炸(!
)意味着什么的误解。没有爆炸,因为只有一个replace
方法才有意义,所以没有必要将它标记为“更危险”。
答案 1 :(得分:2)
没有。每当你想要一个与另一个现有字符串无关的新字符串时,从现有字符串中创建新字符串就没有意义了。例如,假设有String
方法create_new_string
通过使用给定参数替换内容,从现有字符串中创建新的字符串实例,如下所示:
"foo".create_new_string("bar")
# => "bar"
很容易看出这没有意义。您可以而且应该使用字符串文字创建一个新字符串:
"bar"
# => "bar"
因此,使用String
方法通过替换其内容来破坏性地创建新字符串是没有意义的;一个有意义的方法,将取代字符串的内容应破坏性地替换接收器字符串的内容,并毫不奇怪地返回该字符串。因此,不需要爆炸。