Application.rb覆盖基类Ruby类

时间:2016-04-27 13:32:54

标签: ruby-on-rails ruby alias

我有一个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替换结果。我相信这会产生一些意想不到的后果,例如难以调试的运行时问题。有没有替代这种方法或听起来像这样?

1 个答案:

答案 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