我有一个RoR应用程序在其application.rb
中执行以下操作>>> s = set([1,2,3,4,5])
>>> s
{1, 2, 3, 4, 5}
>>> l = [1,3,5,7,9]
>>> l
[1, 3, 5, 7, 9]
>>> s.issubset(l)
False
>>> s <= l
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
s <= l
TypeError: unorderable types: set() <= list()
>>> s <= set(l)
False
>>> s.intersection(l)
{1, 3, 5}
>>>
这反过来确保每次有人调用Digest::MD5 = Digest::SHA256
时,它会用Digest::MD5
替换结果。我相信这会产生一些意想不到的后果,例如难以调试的运行时问题。有没有替代这种方法或听起来像这样?
答案 0 :(得分:2)
对我来说非常危险。我理解想要在MD5上使用SHA256,但它们绝对不能互操作,并且MD5肯定有良好的用途,可能会被某些依赖项使用。
相反,如果使用MD5,为什么不使用around别名来发出警告?
class Digest::MD5
alias :orig_hexencode :hexencode
def hexencode(str)
Rails.logger.warn("Hexencode called #{}")
puts caller
orig_hexencode(str)
end
end