簡體   English   中英

Ruby:如何從Hash填充Hash的子類

[英]Ruby: How to populate subclass of Hash from Hash

我正在創建一個哈希的子類,我希望能夠最初使用哈希來填充它,即:

class HashSub < Hash
  def initialize(old_hash)
    ...
  end
end

a = HashSub.new({'akey' => 'avalue'})

puts a['akey']

>> avalue

由於Hash.new不接受哈希,實現此目的的最干凈方法是什么?

根據我的經驗,最干凈的方法是不使用初始化程序,而要依賴類的[]運算符:

>> class SubHash < Hash; end
=> nil

>> a = Hash[{:a => :b}]
=> {:a=>:b}

>> a.class
=> Hash

>> b = SubHash[{:a => :b}]
=> {:a=>:b}

>> b.class
=> SubHash

為了改善Denis的答案,您可以將class方法[]別名為new

class SubHash < Hash; end
  singleton_class{alias :new :[]}
end

SubHash.new(a: :b).class # => SubHash
H = Class.new Hash
a = {a: 2, b: 3}
b = H[ a ]
b.class #=> H

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM