Как динамически расширить модуль на класс? - PullRequest
0 голосов
/ 05 февраля 2019

В настоящее время у меня есть два класса, каждый из которых расширяет свой модуль:

class Example1
  def initialize
    extend TopModule:SubModule1
  end
end

class Example2
  def initialize
    extend TopModule:SubModule2
  end
end

Вместо того, чтобы иметь два класса, каждый из которых имеет свой собственный расширенный модуль, можно создать один класс, а затем расширить модуль науровень объекта?

Я добавил имя модуля и передал его конструктору объекта, но жалуюсь на код.

class Example
  def initialize (module)
    self.send("extend TopModule::#{module}"
  end
end

object = Example.new('Submodule1')

NoMethodError:
  undefined method `extend TopModule::SubModule1' for #<Example:0x00000000057c8198>

Общая проблема: скажем, у меня есть Nобъекты (все они должны быть из одного класса, но каждый объект должен иметь свой собственный модуль).Как лучше всего использовать эту возможность?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Обновленный ответ!

module TopModule
  module SubModule1
    def hello
      puts "Hello from #1"
    end
  end
end

module TopModule
  module SubModule2
    def hello
      puts "Hello from #2"
    end
  end
end

class Example
  def initialize(mod)
    extend TopModule.const_get(mod)
  end
end

Example.new("SubModule1").hello
# => Hello from #1
Example.new("SubModule2").hello
# => Hello from #2
0 голосов
/ 05 февраля 2019

Возможно, вы на ложном пути, и это заставляет вас искать "плохое" решение. Но вот оно.

class Example
  def initialize m
    self.instance_eval("extend Topmodule::#{m}")
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...