小编典典

为什么在 Ruby 中构建字符串时,铲子运算符 (<<) 优于加号 (+=)?

all

我正在通过 Ruby Koans 工作。

about_strings.rb*
中的test_the_shovel_operator_modifies_the_original_stringKoan包含以下注释:
*

在构建字符串时,Ruby 程序员倾向于使用铲运算符 (<<) 而不是加号运算符 (+=)。为什么?

我的猜测是它涉及速度,但我不明白引擎盖下的动作会导致铲子操作员更快。

有人能解释一下这个偏好背后的细节吗?


阅读 58

收藏
2022-08-19

共1个答案

小编典典

证明:

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()会就地改变接收器。

2022-08-19