Символ
Символы в Ruby представляют собой объекты, которые представляют собой неизменяемые строки и используются для определения уникальных идентификаторов. В этом уроке мы рассмотрим основы символов в Ruby и посмотрим, как их можно использовать в вашем коде.
Создание символов
Символы в Ruby представлены символом двоеточия :
перед строковым литералом. Например, вот так можно создать символ:
Символы могут также создаваться с помощью метода строки .to_sym()
и .intern()
. Оба метода преобразуют строку в символ. Вот к примеру мы создаем тот же самый символ :hello_world
, но с помощью метода строки .to_sym()
:
Использование символов
Символы обычно используются как ключи хэша. Посмотрим на пример:
Важно: когда вы записываете хэш в формате двоеточия ({'hello':'world'}
), то ruby автоматически превращает ваш строковый ключ в символ
Главное отличие симвоал от строки: иммутабельность. Иммутабельность - это состояние объекта быть неизменяемым. В будущих главах мы будет обсуждать устройство хэш таблицы изнутри, где вы поймете почему иммутабльность это очень важно для ключа в хэш структуре, сейчас главное запомнить эту особенность.
А разве строки не иммутабельны ? На самом деле нет. Да, многие методы, которые позволяют изменять строку возвращают новое значение, а исходная строка остается неизменной, но в тоже время многие из этих методов имеют 'двойников' с таким же названием, но с добавлением !
в конце, которые делают тоже самое, но при этом изменяют и исходную строку тоже. Пример:
Совет: чтобы писать чистый код и получать предсказуемое поведение программы, пользуйтесь только методами, которые не изменяют исходную строку. Пусть это не так дешево по расходу оперативной памяти, зато ошибок будет меньше
Задание symbol_string
Напишите два метода:
convert_string_symbol(str)
иconvert_symbol_string(sym)
. Первый должен принимать в аргументах строку и возвращать его представление в виде символа, второй метод принимает символ в аргументах и должен возвращать его строковое представление.Протестируйте методы, переведя ее вашим методом в символ, а после полученный символ обратно в строку
Last updated