“self.to_a”可以工作但是“self.to_a.join('')。gsub(/ \ W /,”“)”不是

时间:2012-10-16 03:22:30

标签: ruby

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

ValidPalindromeTest.new(81,96).palindrome?

它应该返回true但不返回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)也应该有效。

1 个答案:

答案 0 :(得分:0)

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