このメソッドは、各オブジェクトに固有の整数を示していますか?rubyのobject_idメソッドはメモリの場所を参照していますか?
7
A
答えて
1
あなたは "ruby"の意味に依存します;)jrubyでは、私が知る限り、それは単なる一意の整数です。
また、数字のようなものはメモリの場所ではありません。私はすべての細部を忘れ、誰かがあなたにそれらを与えることを確かめる。
irb(main):020:0> 1.object_id
=> 3
irb(main):021:0> (2-1).object_id
=> 3
1
通常のルビー(MRI 1.8.xと1.9.x)では、それは単なる値です。
これは、多くのパラメータ、値、オブジェクトタイプ、メモリ内の場所の組み合わせでもIronRubyの
6
の場合です。
さらに読むことができますhere
4
これはメモリの場所を直接参照するものではなく、特定のRubyの実装に固有のものです。 Cコードを読むことができる場合は、Ruby 1.8.6ソースのgc.c
のrb_obj_id
とid2ref
のメソッドを見るのが有益です。 Ruby Hacking Guide chapter 2の部分翻訳の「VALUEに埋め込まれたオブジェクト」セクションの「エンコーディング」についてさらに読むことができます。
+0
[MRIソースにリンク](http:// rxr。 whitequark.org/mri/source/gc.c#3158) –
3
それはあなたが使用してオブジェクトIDの逆引き参照を実行できることは注目に値します:たとえば
ObjectSpace._id2ref(object_id)
を:
ObjectSpace._id2ref(0) #=> false
ObjectSpace._id2ref(1) #=> 0
ObjectSpace._id2ref(2) #=> true
ObjectSpace._id2ref(3) #=> 1
ObjectSpace._id2ref(4) #=> nil
関連する問題
- 1. なぜ2つの一意のオブジェクトのインスタンス変数がメモリの場所を参照していますか?
- 2. 変数の参照とアドレス(メモリの場所)
- 3. 他の場所からのDLL参照
- 4. geokitで場所を参照
- 5. Visual C++プロパティシートは、プロジェクトの場所を参照できますか?
- 6. 別の場所からbashスクリプトを実行していますが、スクリプトのある場所を参照しています
- 7. Ruby on Railsで現在のユーザを参照しています
- 8. HTMLページの特定の場所を参照する方法は?
- 9. PHPのメモリ参照
- 10. 別のRubyコードファイルでメソッドを参照するには?
- 11. antファイル内からantスクリプトの場所を参照する
- 12. PlayN.Logからの出力を参照する場所
- 13. JavaFX8 WebEngineのexecuteScript( "window")メソッドはJavaScriptのウィンドウオブジェクトを参照していますか?
- 14. Rubyシンボル#to_procは1.9.2-p180の参照をリークしますか?
- 15. java8:別のメソッド参照からのメソッド参照
- 16. メソッドを参照してオブジェクトを渡す
- 17. 参照はC++でメモリを占有しますか?
- 18. ruby on rails:SQLクエリの正しい場所
- 19. インスタンスを参照する `self`のようなRubyメソッド
- 20. 参照モニタへのメソッド呼び出しをインターセプトしていますか?
- 21. 静的メソッドからの参照をスレッドセーフで戻していますか?
- 22. サードパーティDLLを参照するのに最適な場所
- 23. 実行時にJarファイルの場所を参照する方法
- 24. メソッド参照パラメータとしてのインタフェースパラメータ
- 25. Kotlin:メソッド参照が機能していませんか?
- 26. ソリューション内の他のプロジェクトで参照されているdllクラスライブラリの場所を設定します
- 27. java .classpathは、インストール場所に依存しないeclipseプラグイン・フォルダ内の.jarファイルを参照できますか?
- 28. メモリからのjni参照の解放
- 29. Javaのメモリ、パス・バイ・バリュー、参照渡し
- 30. Pythonオブジェクト階層。所有者インスタンスを参照していますか?
Fixnumかのobject_idビットに格納されている左へとシフトされました最下位ビットがセットされています。http://stackoverflow.com/questions/2402228/accessing-objects-memory-address-in-ruby/2402440#2402440 あなたの '(2-1)'は意味がありません。代わりに '(4711 >> 1).object_id' –