+= 和 << 连接字符串的 Ruby 区别

标签 ruby string

<分区>

在 Ruby 1.8.7 上,当我发现 << 之间似乎存在巨大差异时,我正在循环连接字符串。和 +=String 上对象:

 y = ""
 start = Time.now
 99999.times { |x| y += "some new string"  }
 puts "Time: #{Time.now - start}"
 # Time: 31.56718

 y=''
 start = Time.now
 99999.times { |x| y << "some new string"  }
 puts "Time: #{Time.now - start}"
 # Time: 0.018256

我用谷歌搜索了一下,找到了一些结果:

http://www.rubylove.info/post/1038516765/difference-between-string-concatenation-ruby-rails

<<修改两个字符串,而 +=只修改调用者。我不明白为什么是 <<更快。

接下来我去了 Ruby 文档,但我想知道为什么没有方法 +=

http://ruby-doc.org/core-2.2.0/String.html

最佳答案

铲子运算符(operator)<<表现比 += 好得多在处理长字符串时,因为允许铲操作符修改原始字符串,而 +=每次运行时都必须将第一个字符串中的所有文本复制到一个新字符串中。

没有+=在 String 类上定义的运算符,因为 +=是组合运算符。总之x += "asdf"完全等同于 x = x + "asdf" , 所以你应该引用 +字符串类上的运算符,而不是查找 +=运营商。

关于+= 和 << 连接字符串的 Ruby 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29990933/

相关文章:

ruby - Oauth2 谷歌 API ruby 客户端 : How to set Approval Prompt to Auto?

ruby-on-rails - Spring 服务器 : Timeout error

将文本文件转换为 C 字符串 - 使用 md5 进行哈希

ruby - "**/*/"和 "**/"之间的区别?

ruby-on-rails - 如何 rspec 模拟 ruby​​ rails 记录器类

ios - 在 swift 中初始化一个具有数组作为属性的自定义对象

java - 检查字符串是否为空不起作用

java - 无法获得将一个字符串中的字符与另一个字符串进行比较并返回 true 的 for 循环

ruby - cucumber 、 capybara 和 Selenium 随机工作

java - 创建一个组合数组,检查其中的一个项目