+ =和<<之间的Ruby差异以连接字符串
在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 doc,但我想知道为什么没有方法+=
http://ruby-doc.org/core-2.2.0/String.html
铲斗操作符<<
在处理长字符串时执行比+=
好得多,因为允许铲操作符修改原始字符串,而+=
必须在每次运行时将第一个字符串中的所有文本复制到新字符串中。
String类上没有定义+=
运算符,因为+=
是组合运算符。 简而言之, x += "asdf"
完全等同于x = x + "asdf"
,因此您应该在字符串类上引用+
运算符,而不是查找+=
运算符。
- Rails基于对象的权限/授权引擎?
- 与gulp-ruby-sass一起吞咽:错误:../ style.css.map:3:1:未知单词
- 尝试使用Rails和PostgreSQL生成模型时,命令会挂起而不会出错
- Ruby String.encode仍然提供“UTF-8中的无效字节序列”
- 在mac osx上安装sqlite3?
- 类的超类不匹配用户 – 从ActiveRecord :: Baseinheritance
- if-else中的链接条件过多
- 如何将UTF8组合字符转换为ruby中的单个UTF8字符?
- 在命令行中调用“mvim。”时“dyld:Library not loaded”,“libruby.1.9.1.dylib”