Gibt es etwas Idiomatischeres als das Folgende?
foo.class == String
ruby
idioms
typechecking
Davidkammern
quelle
quelle
is_a?
tatsächlich die geeignetere Redewendung verwendet wird (und oft ist eine Überprüfung der Ententypisierung, wie sie Andrew Grimm erwähnt, sogar noch besser). Ein strenger Klassenvergleich ist normalerweise ein Codegeruch. en.wikipedia.org/wiki/Liskov_substitution_principleString
, sondern auch mitInteger
undFloat
. Funktioniert es auch fürDecimal
? (Der erhabene Textinterpreter hebt die Syntax anders hervorDecimal
, was mich misstrauisch macht)Ein Ansatz, bei dem mehr Enten geschrieben werden, wäre zu sagen
to_str
gibt an, dass die Klasse eines Objekts möglicherweise kein tatsächlicher Nachkomme des Strings ist, das Objekt selbst jedoch sehr stringartig (stringy?) ist.quelle
foo
entweder seintrue
,false
oder eine Vanille-Saite, aber es ist gut allgemeinere Lösungen zu erfahren.to_str
oderto_s
? Die beiden sind etwas unterschiedlich.Du kannst tun:
Und das allgemeinere:
quelle
kind_of
allgemeiner? Sie scheinen synonym zu sein :is_a
.instance_of?
stattis_a?
.oder
Wenn es Sie nur interessiert, wenn es von
String
irgendwo in seiner Vererbungskette stammtquelle
Zusätzlich zu den anderen Antworten definiert Class die Methode ===, um zu testen, ob ein Objekt eine Instanz dieser Klasse ist.
quelle
Ich denke, ein besserer Weg ist es, einige Prädikatmethoden zu erstellen. Dadurch wird auch Ihr "Single Point of Control" gespeichert.
Je mehr Enten tippen;)
quelle
"string".is_a?(String)
. Es scheint, als würden Sie das Rad neu erfinden. Es gibt auchclass
,instance_of
,kind_of
usw ... Schlechte Idee zu Affen - Patch derObject
Klasse, nicht zu erwähnen , es unnötig ist.pre_check("test".is_string?)
Jetzt ändert sich Ihre Projektanforderung und jeder String mit drei oder mehr Zeichen wird nicht mehr als String definiert (ich weiß, dass es ungewöhnlich ist;)). Jetzt können Sie Ihre eigene Methode einfach ändern.