Как создать экземпляр класса и сохранить его как константу класса - PullRequest
0 голосов
/ 02 апреля 2019

Возможно ли с помощью Ruby создать экземпляр класса и сохранить экземпляр в том же классе, что и константа?

class MyClass

   DEFAULT = MyClass.new("haha")

   def initialize(arg)
      puts(arg)
   end
end

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

Я пробовал это, но я получаю некоторые странные результаты: 'initialize': неправильное количество аргументов (задано 1, ожидается 0) (ArgumentError) в строке объявления DEFAULT.

Ответы [ 2 ]

3 голосов
/ 02 апреля 2019

но я получаю некоторые странные результаты: 'initialize': неправильное количество аргументов (задано 1, ожидается 0) (ArgumentError)

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

Переместите эту константу после метода (а также всех других методов, которые может вызывать ваш инициализатор).

1 голос
/ 03 апреля 2019

Вы говорите, что хотите "создать экземпляр класса и сохранить экземпляр в том же классе, что и константа".Я интерпретировал это как «создание экземпляра класса и сохранение того же экземпляра внутри класса как константы».Это также соответствует названию вопроса.

Вы можете сделать это следующим образом.

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> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...