Ruby /
Metaprogramming /
Dynamics of Variables
Для работы с переменными в метапрограммировании существуют следующие методы.
для констант -
class Person
MAX_YEARS_OLD = 120
end
# получение значения константы
Person.const_get('MAX_YEARS_OLD')
# => 120
# задание значения
Person.const_set('MAX_YEARS_OLD', 140)
# => warning: already initialized constant Person::MAX_YEARS_OLD
# проверка существования
Person.const_defined?("MAX_YEARS_OLD")
# => true
для инстансных переменных -
class Person
def initialize
@age = 37
end
end
person = Person.new
# получение значения инстансной переменной
person.instance_variable_get(:@age)
# => 37
# задание значения
person.instance_variable_set(:@age, 140)
# => 140
# проверка существования
person.instance_variable_defined?(:@age)
# => true
для переменных класса -
class Person
def initialize
@@max_age = 140
end
end
# получение значения инстансной переменной
Person.class_variable_get(:@@max_age)
# => 140
# задание значения
Person.class_variable_set(:@@max_age, 120)
# => 120
# проверка существования
Person.class_variable_defined?(:@@max_age)
# => true