创建一个可以从另一个类初始化新对象的方法

时间:2019-06-11 03:44:05

标签: ruby-on-rails ruby ruby-on-rails-5.2

能够从另一个类中调用一个类的正确结构是什么?

我可以使用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 个答案:

答案 0 :(得分:1)

您需要在myobject上定义方法MyClass,该方法返回MyObject ...

module MyModule
  class MyClass
     class MyObject
     end

     def self.myobject; return MyObject; end
  end
end

答案 1 :(得分:0)

如果我对您的理解正确,则您具有某个类的变量,并且想要创建同一类的新对象。假设您所有的类都有一个空的构造函数,则可以执行

myobject.class.new()

如果您还希望使新对象具有与另一个对象相同的内部状态,请编写一个方法

 class MyMethod
     def clone
       ...
     end
 end

执行此任务。

答案 2 :(得分:0)

这里的答案是正确的,但是不要这样做,这不是标准的,对于任何阅读您的代码的人来说,都会造成混淆。

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

如果想用更短的方法来创建类的实例,最好创建一个工厂方法来返回该类的新实例。