2013-10-15 3 views
0

Я пытаюсь создать простой класс Ruby, но я застреваю. Это мой код:Невозможно создать Ruby Hash внутри класса

#!/usr/bin/ruby 
class Dock 

@ships = Hash.new(false) 

def initialize() 
end 

def store(ship, pier) 
    @ships[pier] = ship 
end 

end 

yathi = Dock.new 
yathi.store("test", 12) 

Но когда я пытаюсь запустить, запустив это в терминале:

ruby test.rb 

Это сообщение об ошибке я получаю:

test.rb:8:in `'store': undefined method `'[]=' for nil:NilClass (NoMethodError) 
    from test.rb:13 

Это делает работайте, если я переписал это следующим образом:

@ships = {pier => ship} 

Но это создает новый хэш каждый раз с одним значением, которое я не хочу. Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?

ответ

3

Поместите @ships = Hash.new(false) внутри метода initialize. Когда вы ставите его вне метода initialize, вместо этого вы определяете переменную экземпляра класса. Запишите this, если вы хотите узнать больше.

+0

Это сделал это! Огромное спасибо. И теперь я понимаю, что когда я использовал нотацию {}, она создавала совершенно новый хеш, не зависящий от начальных @ships, которые я определил. – Yathi

2

Попробуйте инициализации хэша внутри метода «инициализировать», так что он является членом экземпляров класса Dock вместо члена самой Dock класса:

class Dock 
    def initialize() 
    @ships = Hash.new(false) # <-- Define @ships as an instance variable. 
    end 
    def store(ship, pier) 
    @ships[pier] = ship 
    end 
end 
+0

Это сработало! Спасибо. – Yathi

Смежные вопросы