2009-03-19 5 views

risposta

1

beh, dipende da cosa intendi per "rubino";) In jruby è solo un numero intero unico per quello che posso dire.

Inoltre, cose come i numeri non sono la posizione della memoria. Ho dimenticato tutti i dettagli e sono sicuro che qualcuno te li darà.

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

Fixnum vengono memorizzati nel bit object_id spostato verso sinistra e con la set di bit meno significativo, vedi http://stackoverflow.com/questions/2402228/accessing-objects-memory-ad-ress-in-ruby/2402440#2402440 Il tuo '(2-1)' non ha senso, prova questo invece '(4711 >> 1) .object_id' –

1

In "normale" rubino (MRI 1.8.xe 1.9.x) è solo un valore univoco.

Questo è anche il caso in IronRuby

6

Si tratta di una combinazione di molti parametri, valore, tipo di oggetto, posto in memoria.
Maggiori informazioni possono essere lette here

4

Non è un riferimento diretto alla locazione di memoria e la "codifica" è specifico per una particolare implementazione rubino. Se riesci a leggere il codice C, potresti trovare istruttivo esaminare i metodi rb_obj_id e id2ref in gc.c nell'origine Ruby 1.8.6. Puoi anche leggere ulteriori informazioni sulla "codifica" nella sezione "Oggetti incorporati in VALUE" della traduzione parziale di Ruby Hacking Guide chapter 2.

+0

[Collega a sorgente MRI.] (http: // rxr. whitequark.org/mri/source/gc.c#3158) –

3

vale la pena notare che è possibile eseguire una ricerca inversa di ID oggetto utilizzando:

ObjectSpace._id2ref(object_id) 

Ad esempio:

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