Ruby Gsub возвращаемое значение - PullRequest
0 голосов
/ 03 марта 2012

Только что начал с Ruby и застрял со встроенными конструкциями редактирования:

v1="SO"
print v1.gsub!(/\W/,"").reverse
v2="SO!!"
print v2.gsub!(/\W/,"").reverse

v1.gsub! приводит к нулю.Зачем?v2.gsub! работает.

1 Ответ

7 голосов
/ 03 марта 2012

Ключевым моментом здесь является то, что вы используете изменяющуюся версию gsub, gsub!, которая изменяет фактическую строку, к которой она вызывается. Что касается того, что он возвращает, документация говорит это лучше всего:

Выполняет замены String#gsub на месте, возвращая str или nil, если замены не были выполнены.

Вы должны использовать версию без мутаций, gsub, если вы на самом деле не хотите изменять строку, для которой она вызывается:

print v2.gsub(/\W/, "").reverse

Или вы можете выполнить подстановку перед печатью переменной:

v2.gsub!(/\W/, "")
print v2.reverse

Или, в Ruby 1.9 вы можете использовать tap:

print v1.tap { |v1| v1.gsub!(/\W/, "") }.reverse
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...