繁体   English   中英

如何初始化Ruby中当前类以外的实例?

[英]How to initialise an instance other than the current class in Ruby?

我想基于初始参数初始化不同类的实例。 例如,我想对Hello.new(true)Hello.new(false)有不同的行为。 确切地说,我希望他们创建不同类的实例

我怎么能在Ruby中实现这一点?

class Name1
end

class Name2
end

class Hello
  def initialize(opts)
    if opts
      Name1.new
    else
      Name2.new
    end
  end
end

你所说的是Factory模式(至少是一个简单的版本)。 可以将new进程拆分为手动allocateinitialize ,但我不推荐它。

主要原因是因为它完全违反直觉。 你(几乎)永远不会发现Ruby库表现得像这样。

相反,我建议你使用不同的方法。 例如, #factory

class Name1
end

class Name2
end

class Hello
  def self.factory(opts)
    klass = if opts
      Name1
    else
      Name2
    end
    klass.new
  end
end

Hello.factory(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM