Ruby &引用;自我介绍;工作,但;self.to“u a.join(';';).gsub(/\W/,“quot”)”;不
我的代码已通过所有测试条件(例如,数组、字符串、哈希…),但以下条件除外:Ruby &引用;自我介绍;工作,但;self.to“u a.join(';';).gsub(/\W/,“quot”)”;不,ruby,Ruby,我的代码已通过所有测试条件(例如,数组、字符串、哈希…),但以下条件除外: ValidPalindromeTest.new(81,96).palindrome? 它应该返回true,但不返回。代码是: class String def palindrome? self.gsub(/\W/,"").downcase == self.gsub(/\W/,"").downcase.reverse end end module Enumerable def palind
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
它起作用了
问题是ValidAlindrometest.new(81,96)的类型是什么?它应该是
validAlindRometest
类型的实例,对吗?第二种方法怎么能通过自动分级机,而第一种方法不能?因为在我看来,只要self.to_a
起作用,其余(.join(''.gsub(/\W/,'').downcase
)也应该起作用。我不太明白你想做什么,但是如果你的目标是设置一个知道数组是否是“回文”的方法,我认为第一种方法计算true是通过一个数组,如%w(anita la va la ti na)
,第二种方法计算true是通过一个数组,如[0,2,3,2,0]
,这意味着这些方法计算不同的东西,如果用同一个对象测试它们,它们不会同时返回true。第一种评估方法更为复杂,它会做一些不同的事情。但是,如果你想在Enumerable中混合使用该方法,为什么要使用self.to_a?也许你可以展示一下self.to_a给你的是什么1)81是96的回文?2) 您参考的自动平地机是什么?3) 你能发布你的单元测试吗?4) 与您的问题不太相关,但是……我不知道您的回文方法的效率有多高,但您正处于一个O(n^2)解决方案(来自#=
)。有一个简单但不像Ruby的算法可用(只需在字符上循环并比较末端,例如,chars[head\u index]==chars[tail\u index]
)。