Подтвердить что ты не робот

В чем разница между этими двумя символами Ruby?

Я обнаружил это после игры с идентификаторами объектов.

ObjectSpace._id2ref(2648)
=> :**
ObjectSpace._id2ref(6688)
=> :**
ObjectSpace._id2ref(2648) == ObjectSpace._id2ref(6688)
=> false

Первый - символ оператора экспоненциальности,

2.send(ObjectSpace._id2ref(2648), 3)
=> 8
2.send(ObjectSpace._id2ref(6688), 3)
NoMethodError: undefined method `**' for 2:Fixnum

Но второй как-то не так? Я предполагаю, что они просто выглядят одинаково после передачи в #print. Но в чем разница? Является ли один из них символом юникода?

UPDATE: второй, вероятно, новый двойной знак для аргументов ключевого слова, но я не могу проверить это.

4b9b3361

Ответ 1

Эти команды могут подсвечиваться:

ObjectSpace._id2ref(2648).class.ancestors
ObjectSpace._id2ref(6688).class.ancestors