【发布时间】:2015-01-01 03:57:19
【问题描述】:
我在阅读 Ruby 文档时对 gsub 和 tr 之间的区别感到困惑。两者有什么区别?
【问题讨论】:
-
我发现这个问题是因为 RuboCop 提醒我使用 gsub ——我认为下面的答案很好地解释了答案,这基本上是 gsub 和 tr 之间的区别。
标签: ruby
我在阅读 Ruby 文档时对 gsub 和 tr 之间的区别感到困惑。两者有什么区别?
【问题讨论】:
标签: ruby
【讨论】:
tr 这个名字的意思是“翻译”,就像“翻译字符”一样,这正是它的作用。它以同名的 Unix 实用程序命名(以其晦涩和简短的名称而闻名)。
tr 返回str 的副本,其中from_str 中的字符替换为to_str 中的相应字符。如果to_str 比from_str 短,则用最后一个字符填充以保持对应关系。
http://apidock.com/ruby/String/tr
gsub 返回str 的副本,其中所有出现的模式都替换了第二个参数。该模式通常是一个正则表达式;如果作为字符串给出,它包含的任何正则表达式元字符都将按字面意思解释,例如\d 将匹配后跟d 的反冲,而不是数字。
http://apidock.com/ruby/String/gsub
【讨论】:
tr 只能用单个固定字符替换单个字符(尽管您可以在单个 tr 调用中放置多个此类匹配项)但速度很快。gsub 可以使用正则匹配复杂的模式,并替换为复杂的计算结果,但比tr 慢。【讨论】:
tr 比gsub 快几倍。这是一个关于tr 比gsub 快得多的基准。 github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…