Как работает Ruby's replace? - PullRequest
       1

Как работает Ruby's replace?

1 голос
/ 06 апреля 2011

Я смотрю на замену ruby: http://www.ruby -doc.org / core / classes / String.html # M001144

Мне кажется, это не имеет смысла, вы вызываете replace, и он заменяет всю строку.

Я ожидал:

replace(old_value, new_value)

Это то, что я ищу gsub тогда?

замена, кажется, отличается от большинства других языков.

Ответы [ 3 ]

3 голосов
/ 06 апреля 2011

Я согласен с тем, что replace обычно используется в качестве замены шаблона в других языках, но Ruby отличается:)

Да, вы думаете о gsub:

ruby-1.9.2-p136 :001 > "Hello World!".gsub("World", "Earth")
 => "Hello Earth!" 

Стоит отметить, что String # replace может показаться беспомощным, однако он удаляет «испорченность». Подробнее о связанных объектах вы можете прочитать здесь.

2 голосов
/ 06 апреля 2011

Полагаю, причина, по которой вы чувствуете, что replace не имеет смысла, заключается в том, что существует оператор присвоения = (не очень релевантный для gsub).

Важным моментом является то, что String экземпляры являются изменяемыми объектами. Используя replace, вы можете изменить содержимое строки, сохранив ее идентичность как объекта. Сравните:

a = 'Hello' # => 'Hello'
a.object_id # => 84793190

a.replace('World') # => 'World'
a.object_id # => 84793190

a = 'World' # => 'World'
a.object_id # => 84768100

Обратите внимание, что replace не изменил идентификатор строкового объекта, тогда как простое присваивание изменило его. Эта разница имеет некоторые последствия. Например, предположим, что вы присвоили некоторые переменные экземпляра для экземпляра строки. К replace эта информация будет сохранена, но если вы назначите одну и ту же переменную просто другой строке, вся эта информация исчезнет.

0 голосов
/ 06 апреля 2011

Да, это gsub и взято из синтаксиса awk . Я предполагаю, что replace обозначает внутреннее представление строки, так как, согласно документации, нечистота также удаляется.

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