Existe algo mais idiomático do que o seguinte?
foo.class == String
ruby
idioms
typechecking
davidchambers
fonte
fonte
is_a?
é realmente o idioma mais apropriado a ser usado (e muitas vezes uma verificação de digitação de pato como Andrew Grimm menciona é ainda melhor). Uma comparação estrita de classe geralmente é um cheiro de código. en.wikipedia.org/wiki/Liskov_substitution_principleString
, mas também comInteger
eFloat
. Também funciona paraDecimal
? (as sublime texto intérprete destaca a sintaxe de forma diferente paraDecimal
o que me faz suspeitar)Uma abordagem mais tipográfica seria dizer
to_str
indica que a classe de um objeto pode não ser um descendente real da String, mas o próprio objeto é muito parecido com uma string (string?).fonte
foo
vai ser tantotrue
,false
ou uma cadeia de baunilha, mas é bom para aprender soluções mais gerais.to_str
, outo_s
? Os dois são um pouco diferentes.Você pode fazer:
E o mais geral:
fonte
kind_of
mais geral? Eles parecem ser sinónimo:is_a
.instance_of?
vez deis_a?
.ou
se você se importa apenas se for derivado de
String
algum lugar na sua cadeia de herançafonte
Além das outras respostas, Class define o método === para testar se um objeto é uma instância dessa classe.
fonte
Eu acho que uma maneira melhor é criar alguns métodos predicados. Isso também salvará seu "Ponto Único de Controle".
A maneira mais digitação de pato;)
fonte
"string".is_a?(String)
? Parece que você está reinventando a roda. Há tambémclass
,instance_of
,kind_of
, etc ... Bad idéia para monkey patch daObject
classe, para não mencionar que é desnecessário.pre_check("test".is_string?)
Agora, o requisito do seu projeto mudará e cada String com três caracteres ou mais não será mais definida como String (sei que é incomum;)) Agora você pode alterar seu próprio método facilmente.