Ruby:如何从Hash填充Hash的子类

时间:2013-06-12 14:02:24

标签: ruby

我正在创建一个哈希的子类,我希望能够最初使用哈希填充,即:

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

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

puts a['akey']

>> avalue

由于Hash.new没有哈希,实现这一目标的最简洁方法是什么?

3 个答案:

答案 0 :(得分:5)

根据我的经验,最干净的是单独使用初始化程序并依赖类[]运算符:

>> class SubHash < Hash; end
=> nil

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

>> a.class
=> Hash

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

>> b.class
=> SubHash

答案 1 :(得分:1)

要改进Denis的答案,您可以将类方法[]别名为new

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

SubHash.new(a: :b).class # => SubHash

答案 2 :(得分:0)

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