2012-03-17 245 views
1

人照顾设定值来解释为什么我在这里得到一个错误:红宝石 - 在哈希

[~]$ irb 
>> h = Hash 
=> Hash 
>> h["a"] = 100 
NoMethodError: undefined method `[]=' for Hash:Class 
from (irb):2 

但不是在这里:

>> h = {'dog' => 'canine'} 
=> {"dog"=>"canine"} 
>> h["a"] = 100 
=> 100 

回答

7

您需要致电Hash.new。用你的代码,你将Hash类分配给h,而不是它的一个实例。

irb(main):001:0> h = Hash 
=> Hash 
irb(main):002:0> h.class.name 
=> "Class" 
irb(main):003:0> h = Hash.new 
=> {} 
irb(main):004:0> h.class.name 
=> "Hash" 
3

你需要写h = Hash.new,一切都将好的。否则,你正在引用类的方法,而不是实例。这可以按照您的预期工作:

h = Hash.new 
h['dog'] = 5