Чем << отличается от +? - PullRequest
       0

Чем << отличается от +?

15 голосов
/ 16 января 2010

Я вижу много такого в Ruby:

myString = "Hello " << "there!"

Чем это отличается от

myString = "Hello " + "there!"

1 Ответ

25 голосов
/ 16 января 2010

В 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...