0

最初にハッシュを使用して入力できるようにしたい、ハッシュのサブクラスを作成しています。

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

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

puts a['akey']

>> avalue

Hash.newハッシュを取らないので、これを達成する最もクリーンな方法は何ですか?

4

3 に答える 3

5

私の経験では、最もクリーンなのは、初期化子をそのままにして、クラスの[]演算子に依存することです。

>> class SubHash < Hash; end
=> nil

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

>> a.class
=> Hash

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

>> b.class
=> SubHash
于 2013-06-12T14:08:33.687 に答える
1

Denis の回答を改善するために、クラス メソッド[]を にエイリアスできますnew

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

SubHash.new(a: :b).class # => SubHash
于 2013-06-12T15:30:36.553 に答える
0
H = Class.new Hash
a = {a: 2, b: 3}
b = H[ a ]
b.class #=> H
于 2013-06-12T14:09:31.817 に答える