我的代码已经通过了所有测试条件(例如,数组,字符串,哈希..),除了这一个:
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
)也应该有效。
答案 0 :(得分:0)
我不太明白你想要做什么,但如果你的目标是设置一个方法,知道一个数组是否是'回文',我认为第一个方法将评估是你传递一个数组比如%w( ani ta la va la ti na )
,第二个将使用类似[0,2,3,2,0]
的数组来评估true,这意味着这些方法会评估不同的东西,如果用同一个对象测试它们,它们都不会返回true。第一种方法评估更复杂,做不同的事情。但是,如果您想在Enumerable中混合使用该方法,为什么self.to_a
?