我正在通过 Ruby Koans 工作。
about_strings.rb* 中的test_the_shovel_operator_modifies_the_original_stringKoan包含以下注释: *
test_the_shovel_operator_modifies_the_original_string
在构建字符串时,Ruby 程序员倾向于使用铲运算符 (<<) 而不是加号运算符 (+=)。为什么?
我的猜测是它涉及速度,但我不明白引擎盖下的动作会导致铲子操作员更快。
有人能解释一下这个偏好背后的细节吗?
证明:
a = 'foo' a.object_id #=> 2154889340 a << 'bar' a.object_id #=> 2154889340 a += 'quux' a.object_id #=> 2154742560
因此<<更改原始字符串而不是创建新字符串。这样做的原因是,在 ruby 中,它是赋值a += b的语法简写a = a + b(其他运算符也是如此)。<op>=另一方面<<,它的别名concat()会就地改变接收器。
<<
a += b
a = a + b
<op>=
concat()