2010-11-20 10 views

risposta

23

All'interno di un corpo class definizione , self si riferisce alla classe stessa. Module#name ti dirà il nome della classe/modulo, ma solo se ne ha effettivamente uno. (In Ruby, non esiste un "nome di classe". Le classi sono semplicemente oggetti come qualsiasi altro che vengono assegnati a variabili come qualsiasi altro. È solo che se si assegna un oggetto di classe a una costante, allora il metodo name restituirà il nome di quel costante)

Esempio:.

puts class Foo 
    name 
end 
# Foo 

Ma:

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

All'interno della classe stessa:

class_name = self.class 

su un oggetto inizializzata nome obj:

class_name = obj.class 
+1

Si utilizza 'class' come variabile e 'class' è una parola chiave riservata. Rinomina variabile 'classe' – cristian

+0

+1 Esattamente quello che mi serviva :) – onetwopunch

+0

'class_name' ancora non è un nome perfetto per quella variabile, poiché è l'oggetto classe, non la stringa nome. Un nome migliore per la variabile potrebbe essere 'klass'. – aridlehoover

3

se avete obj = SomeClass.new si ottiene la classe con obj.class

0

Nel mio caso, il metodo name stato sovrascritto, trovo to_s dammi di quest'acqua stesso risultato

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