Ruby: Revelar objetos Fixnum pelo seu object_id

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 0x1, somente os objetos da classe Fixnum irão retornar 1.

Veja uma outra dica sobre object_id em Ruby.

This entry was posted in Ruby. Bookmark the permalink.

2 Responses to Ruby: Revelar objetos Fixnum pelo seu object_id

  1. Davi Pires says:

    uau… isso é interessante.

    Parece mágica… TaQ, você se importaria de desmistificar isso?

  2. TaQ says:

    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. :-)

Comments are closed.