Ruby - установка значения в хеш - PullRequest
1 голос
/ 17 марта 2012

Кто-нибудь хочет объяснить, почему я получаю ошибку здесь:

[~]$ 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

Ответы [ 2 ]

7 голосов
/ 17 марта 2012

Вам нужно позвонить 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 голосов
/ 17 марта 2012

Вам нужно написать h = Hash.new и все будет хорошо. В противном случае вы ссылаетесь на методы класса, а не экземпляра. Это работает так, как вы ожидаете:

h = Hash.new
h['dog'] = 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...