2009-03-19 9 views

Répondre

1

Eh bien, cela dépend de ce que vous voulez dire par "ruby";) En jruby c'est juste un entier unique autant que je peux dire.

De même, des choses comme les nombres ne sont pas l'emplacement de la mémoire. J'oublie tous les détails et je suis sûr que quelqu'un te les donnera.

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

Fixnum sont stockés dans le bit object_id déplacé vers la gauche et la jeu de bits le moins significatif, voir http://stackoverflow.com/questions/2402228/accessing-objects-memory-address-in-ruby/2402440#2402440 Votre '(2-1)' n'a pas de sens, essayez à la place '' (4711 >> 1) .object_id' –

1

En rubis «normal» (IRM 1.8.x et 1.9.x) c'est juste une valeur unique.

Ceci est également le cas dans IronRuby

6

Il est une combinaison de nombreux paramètres, la valeur, le type d'objet, dans la mémoire. Plus peut être lu here

4

Ce n'est pas une référence directe à l'emplacement de la mémoire et le "codage" est spécifique à une implémentation Ruby particulière. Si vous pouvez lire le code C, vous trouverez peut-être instructif de regarder les méthodes rb_obj_id et id2ref dans gc.c dans la source Ruby 1.8.6. Vous pouvez également en savoir plus sur le "codage" dans la section "Objets incorporés dans VALUE" de la traduction partielle du Ruby Hacking Guide chapter 2.

+0

[Lien vers la source de l'IRM.] (http: // rxr. whitequark.org/mri/source/gc.c#3158) –

3

Il convient de noter que vous pouvez effectuer une recherche inversée d'ID d'objet à l'aide:

ObjectSpace._id2ref(object_id) 

Par exemple:

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