Как Ruby сравнивает строки? - PullRequest
1 голос
/ 21 февраля 2010

возможно кто-то знает технический ответ на следующее поведение:

s = "hello world!"
s == s.upcase
# =>false, because "hello world!" != "HELLO WORLD!"
s == s.upcase!
#=>true, because s is changed before comparison?

Mathias

Ответы [ 2 ]

4 голосов
/ 21 февраля 2010

Не делай этого.

upcase! возвращает либо строку в верхнем регистре, либо nil, если не было внесено никаких изменений, поэтому результат этого сравнения всегда будет false после первого раза. Но так плохо полагаться на семантику побочных эффектов.

4 голосов
/ 21 февраля 2010

Это произойдет на каждом языке, подумайте об этом

AreEqual(s, s.upcase())

vs.

AreEqual(s, s.upcase!())

В обоих случаях функция upcase (!) должна вызываться перед ее передачей в AreEqual, а в случае upcase!() фактически меняет значение s . upcase() возвращает новую строку с заглавной версией s.

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