Palavras-chave: Ruby, Fixnum, object_id
Em Ruby podemos facilmente verificar se um objeto é da classe Fixnum através do seu object_id (os números podem variar):
s = "oi" s.object_id => -605527578 n = 123456 n.object_id => 246913 s.object_id & 0x1 => 0 n.object_id & 0x1 => 1
Fazendo um and com o object_id e 0×1, somente os objetos da classe Fixnum irão retornar 1.







3 comentários
Feed de comentários deste artigo
26 janeiro 2007 às 16:21
RubyBlog
[...] “>Revelar objetos Fixnum pelo seu objectid I suppose it’s interesting and useful. I’ve remembered this post.Palavraschave: Ruby, Fixnum, objectidEm Ruby podemos facilmente verificar se um objeto da classe Fixnum atravs do seu objectid os nmeros podem variar:s = “oi”s.objectid=gt 605527578n = 123456n.objectid=gt 246913s.objectid amp 0×1=gt 0n.objectid amp 0×1=gt 1Fazendo um and com o objectid e 0×1, somente os objetos da classe Fixnum iro retornar 1.Veja uma outra dica sobre objectid em Ruby.Thanks for interesting article.Link to original article [...]
27 janeiro 2007 às 13:11
Davi Pires
uau… isso é interessante.
Parece mágica… TaQ, você se importaria de desmistificar isso?
28 janeiro 2007 às 8:44
TaQ
Na verdade, foi apenas uma ótima sacada do Matz. Sempre que a gente cria um Fixnum o object_id ele automaticamente usa um número que tem o último bit na direita ativo, e inativo para os outros tipos. Olha só:
[taq@~]irb
irb(main):001:0> s = “oi”
=> “oi”
irb(main):002:0> s.object_id.to_s(2)
=> “-100100000101000000011000011010″
irb(main):003:0> n = 123456
=> 123456
irb(main):004:0> n.object_id.to_s(2)
=> “111100010010000001″
A sacada genial foi aproveitar o número para carregar informação extra. Tem mais uma informação extra ali que vai virar dica provavelmente nessa semana, fique de olho. :-)