2015-07-02 2 views
1

Было бы неплохо, если бы я мог сделать это в Ruby?Инициализация круговых объектов в Ruby

class Type 
    attr_accessor :weak_against, :strong_against 

    def initialize(weak_against, strong_against) 
    @weak_against = weak_against 
    @strong_against = strong_against 
    end 
end 

Fire = Type.new([Water], [Grass]) 
Water = Type.new([Grass], [Fire]) 
Grass = Type.new([Fire], [Water]) 

Но я не могу.

=> type.rb:10:in `<main>': uninitialized constant Water (NameError) 

Кто-нибудь знает работу?

+0

Использование 'type' в качестве имени класса будет очень, ужасно, путая при обсуждении кода. Классы должны представлять объект, вещь, а не атрибут вещи, и должны быть названы соответственно. Что-то вроде «Элемента» может применяться, поскольку вода и огонь являются элементами. Трава - это выброс, но вы можете видеть эту идею. –

ответ

2

Это будет работать:

class Type 
    attr_accessor :weak_against, :strong_against 
end 

Fire = Type.new 
Water = Type.new 
Grass = Type.new 

Fire.weak_against = Water 
Fire.strong_against = Grass 

Water.weak_against = Grass 
Water.strong_against = Fire 

Grass.weak_against = Fire 
Grass.strong_against = Water 
+2

Тогда, конечно, это ужасная объектная модель :) –

+0

Отбросил ее, потому что это не очень красивый код, но он действительно работает. Прошло почти неделю. Вот иди. –

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