Удаление дублирования путем переопределения методов в ruby - PullRequest
0 голосов
/ 04 апреля 2019

Я пишу простой фрагмент ruby ​​для обнаружения палиндромов на английском языке и другой класс для обнаружения палиндромов на другом языке.

Этот первый фрагмент кода работает, как и ожидалось.

# Defines a Phrase class (inheriting from String).
class Phrase < String

  #process string for palindrome testing
  def processor(string)
    self.downcase
  end

  def processed_content
    processor(self)
  end

  def palindrome?
    processed_content == processed_content.reverse
  end
end

#define a translated Phrase
class TranslatedPhrase < Phrase
  attr_accessor :translation

  def initialize(content, translation)
    super(content)
    @translation = translation
  end

  #process translation for palindrome testing
  def processed_content
    processor(translation)
  end
end

Однако этот второй фрагмент не имеет.

# Defines a Phrase class (inheriting from String).
class Phrase < String

  def processor(string)
    self.downcase
  end
  # Returns content for palindrome testing.
  def processed_content
    processor(self)
  end

  # Returns true for a palindrome, false otherwise.
  def palindrome?
    processed_content == processed_content.reverse
  end
end

# Defines a translated Phrase.
class TranslatedPhrase < Phrase
  attr_accessor :translation

  def initialize(content, translation)
    super(content)
    @translation = translation
  end

  # Processes the translation for palindrome testing.
  def processed_content
    processor(translation)
  end
end

Когда я запускаю следующий код. Я получаю TRUE для первого примера и False для второго примера.

frase = TranslatedPhrase.new("recognize", "reconocer")
frase.palindrome? 

Разница в том, что я ввел Процессор метод для удаления дублирования вызова в нижнем регистре.

В чем может быть проблема? Любая помощь будет оценена.

1 Ответ

3 голосов
/ 04 апреля 2019

метод processor должен быть изменен как:

  def processor(string)
    string.downcase
  end

теперь это downcase self вместо параметра.

поэтому ниже не работает

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