2009-03-19 4 views

Respuesta

1

bueno, depende de lo que quiere decir con "ruby";) En jruby es solo un entero único hasta donde yo sé.

Además, cosas como los números no son la ubicación de la memoria. Olvidé todos los detalles y estoy seguro de que alguien se los dará.

irb(main):020:0> 1.object_id 
=> 3 
irb(main):021:0> (2-1).object_id 
=> 3 
+1

Fixnum se almacena en el bit object_id movido a la izquierda y con la conjunto de bits menos significativo, consulte http://stackoverflow.com/questions/2402228/accessing-objects-memory-address-in-ruby/2402440#2402440 Su '(2-1)' no tiene sentido, intente esto en cambio '(4711 >> 1) .object_id' –

1

En el rubí "normal" (MRI 1.8.x y 1.9.x) tiene un valor único.

Este es también el caso en IronRuby

6

Es una combinación de muchos parámetros, el valor, tipo de objeto, lugar en la memoria.
Puedes leer más here

4

No es una referencia directa a la ubicación de la memoria y de la "codificación" es específico de una aplicación particular, Ruby. Si puede leer el código C, puede resultarle instructivo observar los métodos rb_obj_id y id2ref en gc.c en la fuente Ruby 1.8.6. También puede leer más sobre la "codificación" en la sección "Objetos incrustados en el VALOR" de la traducción parcial del Ruby Hacking Guide chapter 2.

+0

[Enlace al origen de MRI.] (http: // rxr. whitequark.org/mri/source/gc.c#3158) –

3

Vale la pena señalar que se puede realizar una búsqueda inversa de ID de objetos usando:

ObjectSpace._id2ref(object_id) 

Por ejemplo:

ObjectSpace._id2ref(0) #=> false 
ObjectSpace._id2ref(1) #=> 0 
ObjectSpace._id2ref(2) #=> true 
ObjectSpace._id2ref(3) #=> 1 
ObjectSpace._id2ref(4) #=> nil 
Cuestiones relacionadas