Требует ли attr_accessor использования символов в качестве переменных в Ruby?

Каждый пример attr_accessor, который я видел, использует символ (:var) в качестве переменной.

Является ли это требованием использования attr_accessorи если да, то почему? Если нет, то почему это такая распространенная практика?


person zapatos    schedule 19.01.2014    source источник


Ответы (2)


Module#attr_accessor

attr_accessor(символ, ...) → ноль

attr_accessor(string, ...) → nil (появилось в Ruby 2.1)

Определяет именованный атрибут для этого модуля, где имя — symbol.id2name, создавая переменную экземпляра (@name) и соответствующий метод доступа для его чтения. Также создает метод name= для установки атрибута. Строковые аргументы преобразуются в символы.


Является ли это требованием использования attr_accessor?

Нет, вам разрешено использовать как символы, так и строки.

Прочитайте это - Понимание символа Ruby как вызова метода

person Arup Rakshit    schedule 19.01.2014

Хотя текущая версия ruby ​​(2.1) разрешает передачу строки (как упоминал @ArupRakshit), более старые версии ruby ​​не выполнял (2.0 и более ранние версии). Таким образом, любой код, который не использует ruby ​​2.1 (а это почти все), должен будет передавать символы.

Помимо этого, в большинстве случаев вы все равно захотите передавать символы, поскольку они являются атомарными, имеют меньше накладных расходов и семантически больше соответствуют определению атрибута, чем строки.

person PinnyM    schedule 19.01.2014