Как определить текущий открытый класс в Ruby?
Текущий класс Ruby
Ответ 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