Преобразование символов Ruby в целые числа - PullRequest
5 голосов
/ 23 марта 2012

Меня удивляет, что символы Ruby могут быть преобразованы в целые числа без ошибок.Так что :a.to_i законно.Мне было интересно, каково значение этого целого числа, является ли оно уникальным значением, характерным для этого символа?

Ответы [ 2 ]

12 голосов
/ 23 марта 2012

Вы не должны этого делать, так как Symbol#to_i был удален в Ruby 1.9 и поэтому не совместим в будущем. В любом случае, документы говорят об этом :

Возвращает целое число, уникальное для каждого символа в конкретном исполнении программы.

Это примерно эквивалентно вызову object_id на символе, поскольку оба они в конечном итоге вызывают функцию C SYM2ID().

3 голосов
/ 23 марта 2012

В 1.8.x символы были непосредственными объектами. Их реализация была быстрой и, в большинстве случаев, маленькой. Но вместе с этим возникла проблема безопасности, связанная с отсутствием сбора мусора.

Методы #to_i и #to_int вернули уникальное целое число и были связаны с внутренней реализацией.

Символы как непосредственные и неявные и явные целочисленные преобразования были удалены в 1.9.x. Вы, конечно, можете получить object_id. Интересно, что в 1.8.x to_i и object_id не возвращалось одно и то же число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...