2010-08-06 9 views

Antwort

103

Es ist fast genau das Gleiche. Sie können Object ‚s instance_of? Methode verwenden:

"a".instance_of? String # => true 
"a".instance_of? Object # => false 

Ruby hat auch die is_a? und kind_of? Methoden (diese 2-Aliase sind, und arbeiten genau das gleiche), die true einer der Supereinstimmungen zurückgibt:

"a".is_a? String # => true 
"a".is_a? Object # => true 
+1

N.B. Soweit ich weiß, gibt dies false zurück, wenn "self" eine Instanz einer Unterklasse des Arguments ist. –

4

Ich hatte Erfolg mit klass, die das Klassenobjekt zurückgibt. Dies scheint Rails-spezifisch zu sein.

Verwendungsbeispiel:

class Foo 
end 

Foo.new.klass 
# => Foo 

Foo.new.klass == Foo 
# => true 

Foo.new.klass == "Foo" 
# => false 

Es ist auch ein Verfahren, das diese erreicht: Object.is_a?, die das Klassenobjekt als Argument und liefert true, wenn self eine Instanz der Klasse oder eine Instanz einer Unterklasse ist .

+3

Es gibt eine Methode 'Object # class': http://apidock.com/ruby/Object/class –

+0

Ich wünschte, ich könnte zwei richtige Antworten auswählen. Array hat keine Klasse als Methode, aber es hat instance_of, aber aktive_record-abjekte haben .klasse, denke ich. – NullVoxPopuli

+0

'Array.class' sollte genauso gut funktionieren. Ich bin in meine Antwort verwickelt worden, weil die Bibliothek, die ich verwende, die Klasse 'Object' mit der Methode' class' erweitert. –

7

kind_of? und is_a? sind auch. Sie sind Rubys Äquivalent zu Javas instanceof.

instance_of? unterscheidet sich darin, dass es nur true zurückgibt, wenn das Objekt eine Instanz dieser exakten Klasse und keine Unterklasse ist.

Verwandte Themen