2012-03-17 286 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