I'usará python como exemplo do que eu'estou procurando (você pode pensar nisso como pseudocódigo se você não'não conhece Python):
>>> a = 1
>>> type(a)
<type 'int'>
Eu sei que em rubi eu posso fazer:
1.9.3p194 :002 > 1.class
=> Fixnum
Mas será esta a forma adequada de determinar o tipo de objecto?
A maneira adequada de determinar o "type" de um objeto, que é um termo instável no mundo Ruby, é chamar object.class
.
Como as classes podem herdar de outras classes, se você quiser determinar se um objeto é "de um determinado tipo" você pode chamar object.is_a?(ClassName)
para ver se o object
é do tipo ClassName
ou derivado dele.
Normalmente a verificação da digitação não é feita em Ruby, mas os objetos são avaliados com base em sua capacidade de responder a métodos particulares, comumente chamados de "Duck typing". Em outras palavras, se ele responde aos métodos que você quer, não há's nenhuma razão para ser particular sobre o tipo.
Por exemplo, object.is_a?(String)
é muito rígido, já que outra classe pode implementar métodos que o convertam em uma string, ou fazer com que ele se comporte de forma idêntica ao comportamento de String. object.respond_to?(:to_s)
seria uma maneira melhor de testar que o objeto em questão faz o que você quer.
também podias tentar: instance_of?
p 1.instance_of? Fixnum #=> True
p "1".instance_of? String #=> True
p [1,2].instance_of? Array #=> True
Muitas vezes em Ruby, você não'não se importa com o que a classe object's é, por si só, você apenas se importa que ela responda a um determinado método. Isto é conhecido como Duck Typing e você'irá vê-lo em todos os tipos de bases de código Ruby.
Portanto, em muitos (se não na maioria) casos, é melhor utilizar Duck Typing utilizando #respond_to?(method)
:
object.respond_to?(:to_i)