Ruby имеет три вида переменных, один вид констант и ровно две псевдо-переменных. Переменные и константы не имеют типов. Хотя нетипизированные переменные и имеют некоторые недостатки, в тоже время они имеют гораздо больше преимуществ и хорошо сочетаются с быстрой и простой философией Ruby.
В большинстве языков переменные должны быть объявлены для того, чтобы указать их тип, модифицируемость (то есть должны ли они быть константами) и область применения; в то время как первое не является проблемой, то остальное можно увидеть из имени переменной, поэтому мы не нуждаемся в объявлении переменной в Ruby.
Первый символ в имени указывает категорию переменной:
- $ - глобальная переменная
- @ - переменная класса
- [a-z] или _ - локальная переменная
- [A-Z] - константа
Единственным исключением из выше приведённого являются псевдо-переменные: self , которая всегда относится к текущему объекту, и nil , которая является бессмысленным значением, присвоенным неинициализированным переменным. Обе переменных являются локальными переменными, но self является глобальной переменной, поддерживаемой интерпретатором, а nil является действительной константой. Таким образом имеется только два исключения, они не должны запутать вас сильно.
Вы не можете присвоить значения self или nil. main , в качестве значения self , относится к объекту верхнего уровня:
ruby> self main ruby> nil nil