Ruby - В чем разница между intern и to_sym
Я наткнулся на Ruby String Documentation и протестировал методы. Два метода, которые я нашел похожими, - это методы to_sym и intern.
"cat".intern
=> :cat
"cat".to_sym
=> :cat
Я искал Qaru и, на удивление, этого не задавали. Я сам не могу найти разницы между этими двумя, поэтому я подумал, что попрошу об этом.
Если они делают то же самое, один метод быстрее другого? Если это так, имеет смысл использовать этот метод.
Ответы
Ответ 1
Они, похоже, являются псевдонимами для одного и того же. Из документации вы можете видеть, что в примере кода intern
используется to_sym
:
intern → symbol
Возвращает символ, соответствующий str, создавая символ, если он ранее не существовало. См. Symbol#id2name
.
"Koala".intern #=> :Koala
s = 'cat'.to_sym #=> :cat
s == :cat #=> true
s = '@cat'.to_sym #=> :@cat
s == :@cat #=> true
Это также можно использовать для создания символов, которые не могут быть представлены используя нотацию: xxx.
'cat and dog'.to_sym #=> :"cat and dog"
Ответ 2
Rubocop использует это сравнение в качестве примера для одного из своих копов: Style/StringMethods по умолчанию для этого полицейского to_sym
предпочтительнее, чем intern
, без какой-либо ссылки на руководство по стилю. или дальнейшая документация. Мое личное наблюдение состоит в том, что выбор сделан только из-за читабельности; учитывая, что производительность не является проблемой, как указано в других ответах.