Как делает <<, отличаются от +?

Я вижу много этого вида этого продолжения в Ruby:

myString = "Hello " << "there!"

Как это отличается от выполнения

myString = "Hello " + "there!"
15
задан Mongus Pong 16 January 2010 в 01:32
поделиться

1 ответ

В Рубине струны мутируются. То есть, значение строки может быть изменено, а не просто заменено другим объектом. x << y на самом деле добавит строку y к x, а x + y создаст новую строку и вернет ее.

Это можно проверить просто в рубиновом интерпретаторе:

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 + "там" возвращает "hellotherethere", но значение x осталось неизменным. Будьте осторожны с мутирующими строками, они могут прийти и укусить вас. Большинство других управляемых языков не имеют мутируемых строк.

Обратите внимание, что многие методы на строках имеют как разрушительные, так и неразрушительные версии: x.upcase вернет новую строку, содержащую версию x в верхнем регистре, оставив x в покое; x.upcase! вернёт заглавное значение - и - изменит объект, на который указывает x.

.
25
ответ дан 1 December 2019 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: