2010-11-20 6 views

Antwort

23

Innerhalb einer class Definition Körper self bezieht sich auf die Klasse selbst. Module#name wird Ihnen den Namen der Klasse/des Moduls mitteilen, aber nur wenn es tatsächlich einen hat. (In Ruby gibt es keinen "Klassennamen". Klassen sind einfach Objekte wie alle anderen, die genau wie andere Variablen zugewiesen werden. Wenn Sie also einer Konstante ein Klassenobjekt zuweisen, dann die name Methode wird den Namen dieser konstante zurück)

. Beispiel:

puts class Foo 
    name 
end 
# Foo 

Aber:

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

Innerhalb der Klasse selbst:

class_name = self.class 

Auf einem initialisierten Objekt mit dem Namen obj:

class_name = obj.class 
+1

Sie verwenden 'class' als Variable und 'class' ist ein reserviertes Schlüsselwort. Rename variable 'class' – cristian

+0

+1 Genau was ich brauchte :) – onetwopunch

+0

'class_name' ist immer noch kein großer Name für diese Variable, da es das Klassenobjekt ist, nicht der Name String. Ein besserer Name für die Variable könnte "klass" sein. – aridlehoover

3

wenn Sie obj = SomeClass.new haben Sie erhalten die Klasse mit obj.class

0

In meinem Fall die name Methode war überschreibt, finde ich to_s geben Sie mir diese gleiches Ergebnis

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