如何创建一个类实例并将其存储为类常量

时间:2019-04-02 20:23:46

标签: ruby

Ruby是否可以实例化一个类并将实例与常量存储在同一类中?

class MyClass

   DEFAULT = MyClass.new("haha")

   def initialize(arg)
      puts(arg)
   end
end

# use it
instance1 = MyClass::DEFAULT
instance2 = MyClass.new("hohoho")

我尝试了此操作,但得到了一些奇怪的结果:'initialize':DEFAULT声明行的参数数目错误(给定1,预期为0)(ArgumentError)。

2 个答案:

答案 0 :(得分:3)

  

但是我得到一些奇怪的结果:'initialize':错误的参数数量(给定1,预期为0)(ArgumentError)

您的单参数初始化方法目前尚未定义。但是有一个默认值,它不带任何参数。因此是错误。

将该常量(以及初始化程序可能调用的所有其他方法)移动到该常量之后。

答案 1 :(得分:1)

您说您希望“实例化一个类并将实例与常量存储在同一类中”。我将其解释为“实例化一个类并将 same 实例作为常量存储在该类中”。这似乎也与问题的标题相符。

您可以按照以下步骤进行操作。

class MyClass
  def initialize(arg)
    puts(arg)
    self.class.const_set(:DEFAULT, self)
  end
end

MyClass.new('hi')
hi
  #=> #<MyClass:0x00005c3edb328a40> 

MyClass.constants
  #=> [:DEFAULT]

MyClass::DEFAULT
  #=> #<MyClass:0x00005c3edb328a40>