Determinar o tipo de um objecto em ruby
vou usar python como exemplo do que estou à procura (pode pensar nele como pseudocódigo se não conhece Python):
>>> a = 1
>>> type(a)
<type 'int'>
sei que em ruby posso fazer:
1.9.3p194 :002 > 1.class
=> Fixnum
Mas esta é a maneira correcta de determinar o tipo do objecto?
4 answers
A forma correcta de determinar o "tipo" de um objecto, que é um termo oscilante no mundo do rubi, é chamar object.class
.
, uma vez que as classes podem herdar de outras classes, se você quiser determinar se um objeto é "de um determinado tipo" você poderia chamar de object.is_a?(ClassName)
para ver se object
é do tipo ClassName
ou derivado dele.
Normalmente a verificação do tipo não é feita em Ruby, mas em vez disso os objectos são avaliados com base na sua capacidade de responder a métodos específicos, vulgarmente chamados " Duck dactilografia ". Em outras palavras, se ele responde aos métodos que você quer, não há razão para ser particular sobre o tipo.
Por exemplo, object.is_a?(String)
é demasiado rígido uma vez que outra classe pode implementar métodos que o convertam numa cadeia, ou fazê-lo comportar-se de forma idêntica à forma como a cadeia se comporta. Seria melhor testar se o objecto em questão faz o que quer.
instance_of?
p 1.instance_of? Fixnum #=> True
p "1".instance_of? String #=> True
p [1,2].instance_of? Array #=> True
Em muitos casos (se não na maioria), é melhor usar a datilografia de patos usando #respond_to?(method)
:
object.respond_to?(:to_i)
Https://www.youtube.com/watch?v=1l3U1X3z0CE
Mas a Ruby não se importa muito com o tipo de objecto, apenas com a classe. Nós usamos classes não tipo. Todos os dados, então, tem uma classe.12345.class
'my string'.class
Eles também podem ter antepassados
Object.ancestors
Eles também têm aulas de meta, mas vou poupar-te os detalhes.
Assim que conheceres a turma, poderás procurar os métodos que podes usar para ela. É aí que o" tipo de dados " é necessário.
Se queres mesmo entrar em detalhes, procura...
"The Ruby Object Model"
Este é o termo usado para como Ruby lida com objetos. É tudo interno para que não vejas muito disto, mas é bom saber. Mas isso é outro tópico. Sim! A classe é o tipo de dados. Os objetos têm classes e os dados têm tipos. Então se você sabe sobre bases de dados então você sabe que há apenas um conjunto finito de tipos.Blocos de texto números