2016-09-28 2 views

ответ

7

В Ruby считывание и запись на @instance переменных (и переменных) объекта должно выполняться с помощью метода на этом объекте. Например:

class TestClass 
    @@variable = "var" 
    def self.variable 
    # Return the value of this variable 
    @@variable 
    end 
end 

p TestClass.variable #=> "var" 

Ruby имеет некоторые встроенные методы для создания простых методов доступа для вас. Если вы будете использовать переменную экземпляра в классе (вместо переменной класса):

class TestClass 
    @variable = "var" 
    class << self 
    attr_accessor :variable 
    end 
end 

Ruby On Rails предлагает a convenience method специально для переменных класса:

class TestClass 
    mattr_accessor :variable 
end 
+0

Вы имели в виду 'cattr_accessor'? :) –

+0

cattr_accessor - лучшее имя, но это просто псевдоним для mattr_accessor (по ссылке, которую я дал). – Phrogz

+3

Также в качестве примечания это не должно иметь метода доступа, поскольку «Object # instance_variable_get» разрешает доступ ко всем переменным экземпляра ('@'), а 'Object # class_variable_get' предлагает то же самое для переменных класса (' @@ ') без необходимость в явном способе получения, например 'TestClass.instance_variable_get (: @ variable)' или 'TestClass.class_variable_get (: @@ variable)' – engineersmnky

2

Вы должны правильно получить доступ к переменной класса , Один из способов заключен в следующем:

class TestClass 
    @@varible = "var" 

    class << self 
    def variable 
     @@varible 
    end 
    end 

# above is the same as 
# def self.variable 
# @@variable 
# end 
end 

TestClass.variable 
#=> "var" 
+0

Спасибо, но, к сожалению, это вызвало более тугую ошибку. –

+0

@VladislavAniskin это не могло вызвать ошибку, потому что это правильный (один из нескольких) способов доступа к переменной класса. –

+0

@VladislavAniskin, как вы придумали «это привело к более жесткой ошибке»? Вы даже попробовали? –

Смежные вопросы