Подтвердить что ты не робот

Текущий класс Ruby

Как определить текущий открытый класс в Ruby?

4b9b3361

Ответ 1

Внутри тела определения class self относится к самому классу. Module#name сообщит вам имя класса/модуля, но только если оно действительно имеет его. (В Ruby нет такой вещи, как "имя класса". Классы - это просто объекты, как и любые другие, которые присваиваются переменным так же, как и любые другие. Просто, если вам придётся назначить объект класса константе, тогда метод name вернет имя этой константы.)

Пример:

puts class Foo
  name
end
# Foo

Но:

bar = Class.new
bar.name # => nil
BAR = bar
bar.name #=> 'BAR'

Ответ 2

Внутри самого класса:

class_name = self.class

На инициализированном объекте с именем obj:

class_name = obj.class

Ответ 3

если у вас есть obj = SomeClass.new, вы получаете класс с obj.class

Ответ 4

В моем случае метод name был перезаписан, я нахожу, что to_s дает мне тот же результат

class Foo
 puts self.name
 puts self.to_s
end
#=> Foo
#=> Foo