Итак, хотя рубин String
глобально уникален, символ рубина
- нет, потому что он хранится по идентификатору где-то в фоновом режиме:
http://gotitsincomputation.com/posts/ruby-symbols-what-are-they
... Это означает, что использование символов требует меньше памяти, учитывая, что у вас есть определенный набор значений, которыми может быть символ (например, вы не хотите превращать каждую строку введенного пользователем текста в символ).
Мой вопрос: Хотя использование символов определенно дает преимущество в производительности, стоит ли оно того в конечном итоге? Я спрашиваю, потому что, например, я пишу большинство своих хэшей, используя символы:
my_hash = {:_id => "123", :key => "value"}
Но в драйвере ruby-mongo все ключи возвращаются в виде строк:
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"}
Но это просто добавляет еще один уровень к приложению:
Кажется, что-то здесь не так ... либо все должно быть символы или строки, по крайней мере, в этом случае не должно быть преобразования назад и вперед.
Что вы думаете об этом? Это нормально? Это вообще проблема, или сборщик мусора Ruby и все такое (еще не дошло) с этим согласны?