Создать метод, который может инициализировать новый объект из другого класса - PullRequest
0 голосов
/ 11 июня 2019

Какова правильная структура, чтобы можно было вызывать класс из другого класса?

Я могу позвонить MyObject.new с помощью MyModule::MyClass::MyObject.new() Однако я бы предпочел вызывать его с помощью:

MyModule::MyClass.myobject.new()

Как мне структурировать свой код, чтобы сделать это?

module MyModule
  class MyClass
     class MyObject
        def initialize(value)
          @value = value
        end

        def method1
          "This is a #{value}"
        end
     end
  end
end

Ответы [ 3 ]

1 голос
/ 11 июня 2019

Вам необходимо определить метод myobject для MyClass, который возвращает MyObject ...

module MyModule
  class MyClass
     class MyObject
     end

     def self.myobject; return MyObject; end
  end
end
0 голосов
/ 12 июня 2019

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

MyModule::MyClass.my_object_instance
class MyClass
  def self.my_object_instance
    MyObject.new 
  end
end 

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

0 голосов
/ 11 июня 2019

Если я вас правильно понимаю, у вас есть переменная какого-то класса и вы хотите создать новый объект того же класса.Предполагая, что все ваши классы имеют пустой конструктор, вы можете сделать

myobject.class.new()

Если вы хотите, чтобы новый объект имел то же внутреннее состояние, что и другой, напишите метод

 class MyMethod
     def clone
       ...
     end
 end

который выполняет эту задачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...