1

以下情况会对性能产生多大影响?我担心这可能会产生很大的影响,因为我到处都在使用它。我不确定它们中的每一个在哪里被调用(即,include?调用这些方法等等|),但任何其他主要方法都可能导致性能下降。

class Source
  def hash
    url.hash
  end
  def ==(other)
    eql?(other)
  end
  def eql?(other)
    return false if other == false || url == nil || other == nil || other.url == nil
    url == other.url
  end
end
4

1 回答 1

5

重写方法本身不会影响性能,但方法的实现很重要。你的方法很糟糕,因为它有多余的东西。最好写成:

def eql?(other)
  url = self.url and other and url == other.url
end

url = self.url是记忆。


你最初有五个条件使它成为现实:

  • 不是其他==假
  • 不是 url == nil
  • 不是其他==无
  • 不是 other.url == nil
  • url == other.url

其中,

  • 通过放入条件可以将 No1 和 No3 放在url一起。
  • No4 在 No2 和 No5 下是多余的,因为 if urlis not nil, and other.urlis url, then other.urlis not nil
于 2013-06-02T05:56:30.470 回答