通过覆盖红宝石中的方法来消除重复

时间:2019-04-04 07:58:31

标签: 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? 

区别在于我引入了 Processor 方法来消除重复调用小写字母的情况。

可能是什么问题?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

方法processor应该更改为:

  def processor(string)
    string.downcase
  end

现在它是downcase自身而不是参数。

这就是为什么下面的方法不起作用

  def processed_content
    processor(translation)
  end