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)。
答案 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>