2015-09-06 4 views
0

Как можно отслеживать объекты классов, нажимая новые экземпляры в массив и разрешать редактирование этого массива объектом другого класса.Отслеживание объектов класса в Ruby

Например,

  • Объект «самолет» (класс Plane) создается, и толкнул в массив под названием «в полете».

  • «Аэропорт» объект (класс аэропорта) просит его на землю и выскакивает из массива.

Есть ли способ сделать это, с и/или без использования переменных класса?

+0

Используйте заводской метод для создания объектов самолета, вместо того чтобы создавать их непосредственно с помощью .new. Этот метод фабрики, помимо создания объектов, также может регистрировать их в каком-либо массиве или что угодно –

ответ

1

Вы можете сделать это, переопределив метод initialize класса Airplane. Что-то вроде этого:

class Airplane 
    class << self 
    attr_accessor :in_flight 
    end 
    self.in_flight ||= [] 

    def initialize(*) 
    self.class.in_flight << self 
    super 
    end 

    def land! 
    self.class.in_flight.delete(self) 
    end 
end 

затем, из нигде в вашем коде, сделать что-то вроде этого:

# We'll just pick a random airplane from the list of those in 
# flight, but presumably you would have some sort of logic around 
# it (already have an Airplane instance somehow, select one from 
# the array according to some criteria, etc). 
airplane = Airplane.in_flight.sample 
airplane.land! 

Не уверен, что это самый большой дизайн приложений в мире, но это, безусловно, сделать если ваши потребности просты.

+0

Это выглядит хорошо, спасибо – Harry

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