2

我的代码已经通过了所有的测试条件(例如,数组、字符串、哈希..),除了这个:

ValidPalindromeTest.new(81,96).palindrome?

它应该返回 true 但没有。代码是:

class String
  def palindrome?     
    self.gsub(/\W/,"").downcase == self.gsub(/\W/,"").downcase.reverse
  end
end

module Enumerable
  def palindrome?
    if self.is_a?(Hash)
      false
    else
      self.to_a.join('').gsub(/\W/,"").downcase == self.to_a.join('').gsub(/\W/,"").downcase.reverse
    end
  end
end

但是当我改为

module Enumerable
  def palindrome?
    if self.is_a?(Hash)
      false
    else
      self.to_a == self.to_a.reverse
    end
end

有用。

问题是什么是类型ValidPalindromeTest.new(81,96)?它应该是一个ValidPalindromeTest类型的实例,对吧?第二种方法怎么能通过auto_grader而第一种方法不能呢?因为在我看来,只要self.to_a有效,其余的 ( .join('').gsub(/\W/,"").downcase) 也应该有效。

4

1 回答 1

0

我不太明白您要做什么,但是如果您的目标是设置一个知道数组是否为“回文”的方法,我认为第一种方法将评估为真,如果您传递了一个类似的数组%w( ani ta la va la ti na )并且second 将使用类似的数组评估 true [0,2,3,2,0],这意味着这些方法评估不同的事物,并且如果您使用相同的对象测试它们,则不会返回 true。第一种方法评估更复杂,并且做不同的事情。但是,如果您尝试在 Enumerable 中混合该方法,为什么要使用self.to_a?

于 2012-10-16T04:04:10.837 回答