2010-11-20 3 views

ответ

23

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

Пример:.

puts class Foo 
    name 
end 
# Foo 

Но:

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

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

class_name = self.class 

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

class_name = obj.class 
+1

Вы используете «класс» в качестве переменной, а «класс» - это зарезервированное ключевое слово. Переименовать переменную 'class' – cristian

+0

+1 Именно то, что мне нужно :) – onetwopunch

+0

'class_name' по-прежнему не является отличным именем для этой переменной, поскольку это объект класса, а не строка имени. Лучшим именем для переменной может быть «класс». – aridlehoover

3

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

0

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

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