Строки - это изменяемые (mutable) последовательности символов, используемые для работы с текстовыми данными.
str = "hello"
str.object_id # => 60 (например)
str << " world" # Модифицируем существующую строку
str.object_id # => 60 (остается тем же)
Характеристики строк:
"Value: #{var}")Символы - это неизменяемые (immutable) идентификаторы, используемые преимущественно как метки.
sym = :hello
sym.object_id # => 123456 (например)
sym.upcase # => :HELLO (возвращает новый символ)
sym.object_id # => 123456 (остается прежним)
Характеристики символов:
| Характеристика | Строки (String) | Символы (Symbol) |
|---|---|---|
| Изменяемость | Да | Нет |
| Использование памяти | Больше | Меньше |
| Повторное использование | Новый объект | Один объект |
| Основное назначение | Текст | Идентификаторы |
| Скорость сравнения | Медленнее | Быстрее |
Используйте строки когда:
Используйте символы когда:
# Плохо (строки как ключи хэша)
{ "name" => "John", "age" => 30 }
# Хорошо (символы как ключи хэша)
{ name: "John", age: 30 }
# Строки для текстовых операций
"Hello #{user.name}".downcase.split
# Символы для идентификации
send(:update) if respond_to?(:update)
"hello".to_sym # => :hello
:hello.to_s # => "hello"
"hello".intern # => :hello (аналог to_sym)