私はRubyで遊んでいて.object_id
、irbのいくつかの連続したセッションで、これらの同じ結果が得られることに気づきました。
false.object_id // 0
true.object_id // 2
nil.object_id // 4
100.object_id // 201
実際、すべての整数のobject_idは((value * 2)+ 1)のようです。
一方、irbを終了して再実行した後は、特定の文字列のobject_idが同じになることはありません。
これは私にいくつかの質問を提起します:
- 特定のを決定するための既知のスキームはあり
object_id
ますか?他は基本的にランダムですか? - true、false、およびnilのIDはシーケンシャルではありません。特定のIDでどのオブジェクトが表されているかを確認する方法はありますか?(他の1桁とIDが何に関連付けられているのか知りたいです。)
- 「100+9」を意味する「ID201のオブジェクト+ID19のオブジェクト」のように、既知のオブジェクトIDを使用してオブジェクトに名前を付けずに参照する難読化されたRubyを記述できますか(そうすべきではありません)。
アップデート
Andrew Grimmの提案を使用して、他の「低ID」オブジェクトを見つけようとしましたが、次のことがわかりました。
- このシーケンスにはこれ以上偶数のオブジェクトはないようです。ID6、8、10などは何も指していません。
- 私の以前の実験で示唆されたように、すべての奇数番号のIDは番号に属しています。具体的には、id 1は0を指し、3は1を指し、5は2を指します。