Итак, хотя ruby String
глобально уникален, ruby Symbol
нет, потому что он хранится id где-то в фоновом режиме:
http://thoughtsincomputation.com/posts/ruby-symbols-what-are-they
... что означает, что использование символов использует меньше памяти, учитывая, что у вас есть определенный набор значений, которые может быть символом (вы не хотите, чтобы каждая строка введенного пользователем текста была символом).
Мой вопрос в том, что, безусловно, преимущество в использовании символов, стоит ли это в конце? Я спрашиваю, потому что, например, я пишу большую часть своих хэшей с помощью символов:
my_hash = {:_id => "123", :key => "value"}
Но в ruby-mongo-driver все ключи возвращаются в виде строк:
mongo_hash = {"_id" => "123", "key" => "value"}
Итак, если бы я использовал как хэш, так и хеш монго, мне пришлось бы делать:
mongo_hash = Model.collection.find_one(:key => "value")
#=> {"_id" => "123", "key" => "value"}
mongo_hash.symbolize_keys!
#=> {:_id => "123", :key => "value"}
Но это просто добавляет еще один слой в приложение:
- Создайте кучу строк для ключей в памяти.
- Теперь создайте символ для каждой строки (уже в памяти после первого раза это делается).
- Теперь уничтожьте строки, которые мы только что создали.
Кажется, что-то не так... либо все должно быть символами или строками, не должно быть преобразования взад и вперед, по крайней мере в этом случае.
Что вы думаете об этом? Это нормально? Это даже проблема, или сборщик мусора из рубинов и все такое (еще не дошло)?