Ищите способ хранить ссылку на класс, чтобы я мог динамически создать его экземпляр позже - PullRequest
0 голосов
/ 26 мая 2018

Я создал эту игровую площадку , которая должна прояснить мой вопрос, но в двух словах, я ищу способ передать ссылку на имя класса инициализатору другого класса, чтобы нана более поздней стадии процесса компиляции я могу создать экземпляр этого класса и что-то с ним сделать.

class Route
  property action : Class

  def initialize(@action)
  end

  def do_something
    @action.new.call
  end
end

class Action
  def call
    puts "called"
  end
end

route = Route.new(Action)

однако, приведенное выше дает мне can't use Object as the type of an instance variable yet, use a more specific type

Я понимаю, что это то, что может еще небыть реализованным на языке, но мне было интересно, есть ли другой способ добиться этого видения, поскольку я не могу действительно сделать, как предложено, и быть более конкретным, потому что мне нужно принять любой класс.

Надеюсь, кто-то будетбыть в состоянии указать мне в правильном направлении ...

Заранее спасибо!

1 Ответ

0 голосов
/ 26 мая 2018

Попробуйте генерики:

Кристалл , 233 байта

class Route(T)
  property action : T

  def initialize(@action)
  end

  def do_something
    @action.new.call
  end
end

class Action
  def call
    puts "called"
  end
end

route = Route(Action.class).new(Action)
route.do_something

Попробуйте онлайн!

...