2013-06-02 49 views
1

以下多少會影響性能?我擔心這可能會產生很大的影響,因爲我在任何地方都使用它。我不確定每個調用的位置(即include?調用這些方法,|也是如此),但其他任何主要方法都可能導致性能下降。在ruby中重寫hash和eql是否會影響性能?

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 

回答

5

覆蓋方法本身不影響性能,但方法的實現很重要。你的方法很糟糕,因爲它有多餘的東西。它可能會寫得更好:

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

url = self.url是memoization。


您最初有五個條件,使其真正:

  • 沒有其他==虛假
  • 沒有URL ==零
  • 沒有其他==零
  • 沒有other.url ==零
  • url == other.url

其中,

  • 通過將url置於該條件,可以放置No1和No3。
  • 4號是NO2和5號下多餘的,因爲如果urlnil,並other.urlurl,然後other.urlnil
+0

謝謝@sawa,我不明白。這項任務如何與邏輯結合在一起,你能否爲我解決這個問題。我想我不明白url = self.url作爲條件? – Kamilski81

+0

查看上面的修改。 – sawa

+0

我只是不明白這是怎樣的memoization,因爲代碼塊執行'每''... ...? – Kamilski81

相關問題