Строки - это изменяемые (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)