Рубиновый палиндром логическое возвращение ложного - PullRequest
0 голосов
/ 20 февраля 2019

Почему это возвращает false?

def palindrome?(word)
  if word == word.reverse!
    return true
  else
    return false
  end
end

puts palindrome?("Stats")

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Если str - любая строка,

str == str.reverse!
  #=> true

Например,

str = "abc"
str == str.reverse!
  #=> true

str == str.reverse! является синтаксическим сахаром для str.==(str.reverse!).Первым шагом Ruby в оценке этого выражения является оценка аргумента str.reverse!.Это выражение делает две вещи: оно заменяет значение str на обратную строку и возвращает обратную строку.Затем метод == сравнивает значение, возвращаемое str.reverse!, со значением, хранящимся в str.Поскольку они одинаковы, выражение возвращает true.

0 голосов
/ 20 февраля 2019
  1. Сначала вы не должны использовать reverse!.Этот метод изменяет word, но вам нужно только получить измененный результат.Поэтому вы должны использовать reverse вместо.
  2. Ваш метод может быть упрощен до:

    def palindrome?(word)
        word == word.reverse
    end
    
  3. "Stats" не является палиндромом, если вы не конвертируетеэто нижний или верхний регистр:

    def palindrome?(word)
        word = word.downcase
        word == word.reverse
    end
    

Результат тестирования окончательной версии:

puts palindrome?("Stats")
# => true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...