Не могу освоить символы в Ruby - PullRequest
5 голосов
/ 17 июля 2011

В последние дни я смотрел, как понимать символы в Ruby.Я читаю каждую статью в Google о символах Ruby, большинство из них являются плохими объяснениями, поэтому я прихожу сюда и вижу, что некоторые вопросы по этой теме существуют, однако я не понимаю, извините.

Из того, что я прочиталЯ понимаю, что символы неизменны и уникальны, поэтому потребление памяти и производительность лучше, чем у обычных строк.

Вопрос № 1
Являются ли символы жизненной целью служить той же нише, что и струны?Является ли цель символов функционировать как удобные константы без переноса значения, например, части после: это фактическое значение?

Вопрос № 2
Когда я действительно ЗНАЮ гдеиспользовать символы?

Я бы высоко оценил ваши собственные объяснения символов вместо ссылок на статьи в Google (я гарантирую, что я уже прочитал это!).

Я также ценю ваше время, если вы можете предоставить больше информации о символах, чем то, о чем я уже спрашивал здесь, потому что я их вообще не понимаю, даже то, что хранится в: symbol_something, это ссылкаили что?

Большое спасибо за помощь!

Ответы [ 2 ]

6 голосов
/ 17 июля 2011

символов в ruby ​​- это способ эффективно использовать неизменяемые строки. Например, предположим, что вы хотите использовать строку «my_key» в качестве ключа хеширования. Простое использование строки является пустой тратой пространства и эффективности, поскольку каждый раз, когда вы задаете хеш-ключ «my_key», вы создаете другой экземпляр строки в другом месте памяти, даже если содержимое значения строки одинаково! Поэтому, если у вас есть 100 экземпляров my_hash ['my_key'], у вас есть 100 экземпляров строки 'my_key'. Не так с символом: my_key. Существует только один экземпляр: my_key, независимо от того, сколько раз вы его используете!

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

1 голос
/ 17 июля 2011

Чтобы понять это, нужно учитывать, что String является объектом Ruby, и он не определен как неизменяемый.В результате ряд языковых процессоров недоступен для оптимизации, и читатель кода может понять или не понять, функционирует ли данная строка как изменяемая структура данных или как ключ к чему-то.

Носимволы являются неизменными, поэтому они имеют уникальные экземпляры.Их также легко набирать, и использование символа четко указывает «идентификатор» или «токен» для всех, кто читает код позже.

Наконец, классSymbol реализует явное преобразование #to_s,, поэтому символы безопасно использовать в выражениях, для которых, как вы знаете, будет вызываться #to_s, например, в шаблонах ERB илив операциях ввода / вывода.

...