2014-04-05 54 views
-1

我正在編寫一個應用程序,用於存儲運行一組度量標準的比賽結果。結果有這些限制:別名自定義Ruby哈希類

  • 一個關鍵"dq_reasons"指的是一個字符串數組
  • 所有其他按鍵默認爲浮動0.0

我喜歡使用自定義ContestResult類,使這些限制明確。我希望這個班級成爲Hash。我可以繼承子類:

MyThing = Class.new(OtherThing) 

但是我的heard子類化核心Ruby類有缺點。我的其他選擇是什麼?我如何設置一個類實例是一個默認值的哈希,並預設一個"dq_reasons"鍵爲空數組?

當前的嘗試:

class ContestResult < Hash 
    extend Forwardable 
    def_delegators :@data, :[], :[]=, :each 
    def initialize(lyst) 
    @data = Hash.new {|h,k| h[k] = 0.0} 
    @data["dq_reasons"] = [] 
    lyst.each {|li| @data[li]} 
    end 
    def inspect 
    @data 
    end 
end 

目前的功能:

c = ContestResult.new([1,2,3]) 
# => {"dq_reasons"=>[], 1=>0.0, 2=>0.0, 3=>0.0} 
c[4] # => 0.0 
c[3] = 34.5 
C# => {"dq_reasons"=>[], 1=>0.0, 2=>0.0, 3=>34.5, 4=>0.0} 
+0

downvote的原因將不勝感激 –

回答

0

如果我正確理解你的問題,你可以做

h = {"dq_reasons"=>[]} 

,隨後調用該Hash#fetch。您可以提供一個默認值。

h.fetch(4, 0.0)