微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么在 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()会就地改变接收器。

解决方法

我正在通过 Ruby Koans 工作。

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。