Есть ли что-нибудь более идиоматичное, чем следующее?
foo.class == String
ruby
idioms
typechecking
davidchambers
источник
источник
is_a?
это более подходящая идиома для использования (и часто проверка типа «утка», как упоминает Эндрю Гримм, даже лучше). Строгое сравнение классов - это обычно запах кода. en.wikipedia.org/wiki/Liskov_substitution_principleString
, но и сInteger
иFloat
. Это тоже работаетDecimal
? (превосходный интерпретатор текста по-разному выделяет синтаксис,Decimal
что вызывает у меня подозрение)Более типичный подход - сказать
to_str
указывает, что класс объекта не может быть фактическим потомком String, но сам объект очень похож на строку (тягучий?).источник
foo
будет либоtrue
,false
или строка ванили, но это хорошо , чтобы узнать более общие решения.to_str
, илиto_s
? Эти два немного отличаются.Ты можешь сделать:
И более общее:
источник
kind_of
более общим? Они кажутся синонимами:is_a
.instance_of?
вместоis_a?
.или
если вас интересует только то, получено ли оно откуда-
String
то из цепочки наследованияисточник
В дополнение к другим ответам Class определяет метод === для проверки того, является ли объект экземпляром этого класса.
источник
Я думаю, что лучший способ - создать несколько методов предиката. Это также сохранит вашу «Единую точку контроля».
Более утиный способ набора текста;)
источник
"string".is_a?(String)
. Кажется, ты изобретаешь велосипед. Там жеclass
,instance_of
,kind_of
и т.д. ... Плохая идея для обезьяны патчаObject
класса, не говоря уже о его излишен.pre_check("test".is_string?)
Теперь требования к вашему проекту изменится, и каждая строка из трех или более символов больше не определяется как строка (я знаю, что это необычно;)) Теперь вы можете легко изменить свой собственный метод.