2013-06-12 7 views
0
내가 즉, 내가 해시를 사용하여 처음 채울 수 있도록하려면 해시의 서브 클래스를, 만들고있어

을에서 해시의 서브 클래스를 채우는 방법 해시, 이것을 달성하는 가장 깨끗한 방법은 무엇입니까?루비 :지지 않습니다 <code>Hash.new</code> 이후</p> <pre><code>class HashSub < Hash def initialize(old_hash) ... end end a = HashSub.new({'akey' => 'avalue'}) puts a['akey'] >> avalue </code></pre> <p>: 해시

답변

5

는 깨끗한, 내 경험, 혼자 초기화를 떠나 및 클래스 '[] 운영자 :

>> class SubHash < Hash; end 
=> nil 

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

>> a.class 
=> Hash 

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

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

데니스에 개선하기 위해'의존하는 것입니다 대답, 당신은 클래스 메소드의 별명을 할 수 []new.

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

SubHash.new(a: :b).class # => SubHash 
관련 문제

 관련 문제