ruby - << 与 + 有何不同?

标签 ruby

我在 Ruby 中看到了很多这样的事情:

myString = "Hello " << "there!"

这和做有什么不同

myString = "Hello " + "there!"

最佳答案

在 Ruby 中,字符串是可变的。也就是说,字符串值实际上可以更改,而不仅仅是替换为另一个对象。 x << y实际上会将字符串 y 添加到 x,而 x + y将创建一个新的字符串并返回它。

这可以在 ruby​​ 解释器中简单地测试:

irb(main):001:0> x = "hello"
=> "hello"
irb(main):002:0> x << "there"
=> "hellothere"
irb(main):003:0> x
=> "hellothere"
irb(main):004:0> x + "there"
=> "hellotherethere"
irb(main):005:0> x
=> "hellothere"

值得注意的是,请参阅 x + "there"返回“hellotherethere”,但返回 x 的值没有改变。小心可变字符串,它们会来咬你。大多数其他托管语言没有可变字符串。

另请注意,String 上的许多方法同时具有破坏性和非破坏性版本:x.upcase将返回一个包含 x 的大写版本的新字符串,同时保留 x; x.upcase!将返回大写的值 - 并 - 修改 x 指向的对象。

关于ruby - << 与 + 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2075855/

相关文章:

ruby - 属性上的 Chef 错误 - 字符串不匹配

Ruby 相当于 NumPy

ruby - Ruby Array #count 如何处理多个 block 参数

ruby - 如何在没有迭代器的情况下在 Ruby 中收集 block 值?

ruby-on-rails - 为什么我不能在 Carrierwave 中编辑此图像?

arrays - 要散列的 Ruby 字符串数组

ruby-on-rails - ec2 ami for rails 3.1 apache passenger

php - 上传非常大的文件(5GB 到 15GB)

mysql - 在 Rails 中将两个表与迁移相关

ruby-on-rails - 使用 Twitter Bootstrap Carousel 激活第一个项目的类