In Java können Sie instanceof
tun. Gibt es ein Ruby-Äquivalent?Wie überprüfe ich, ob eine Variable eine Instanz einer Klasse ist?
Antwort
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
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 .
Es gibt eine Methode 'Object # class': http://apidock.com/ruby/Object/class –
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
'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. –
Schauen Sie sich die Methoden instance_of?
und kind_of?
an. Hier ist der Doc Link http://ruby-doc.org/core/classes/Object.html#M000372
Ich würde versuchen, is_a? auch. –
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.
N.B. Soweit ich weiß, gibt dies false zurück, wenn "self" eine Instanz einer Unterklasse des Arguments ist. –