2012-03-17 11 views
1

誰もが、私はここでエラーを取得していた理由を説明する気にハッシュに値を設定する:でしょうあなたはh = Hash.newを記述する必要がルビー -

>> 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

を、すべて:

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

ではなく、ここで大丈夫ですか?それ以外の場合は、インスタンスではなくクラスのメソッドを参照しています。これは期待通りに機能します。

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