Рубиновый текущий класс - PullRequest
21 голосов
/ 20 ноября 2010

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

Ответы [ 4 ]

26 голосов
/ 20 ноября 2010

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

Пример:

puts class Foo
  name
end
# Foo

Но:

bar = Class.new
bar.name # => nil
BAR = bar
bar.name #=> 'BAR'
24 голосов
/ 20 ноября 2010

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

class_name = self.class

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

class_name = obj.class
3 голосов
/ 20 ноября 2010

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

0 голосов
/ 17 ноября 2017

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

class Foo
 puts self.name
 puts self.to_s
end
#=> Foo
#=> Foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...