任何人都想解释为什么我在这里收到错误:
[~]$ 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
答案 0 :(得分: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"
答案 1 :(得分:3)
你需要写h = Hash.new
,一切都会好的。否则,您将引用该类的方法,而不是实例。这可以按预期工作:
h = Hash.new
h['dog'] = 5