2016-09-28 4 views

답변

7

루비에서는 객체의 변수()를 @instance 변수 (및 @@class 개 변수)로 읽고 쓰는 작업을 해당 객체의 메소드를 통해 수행해야합니다. 예 :

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 

루비는 클래스 변수 위해 특별히 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이 동일한 기능을 제공하므로 접근 자 메서드가 필요하지 않습니다. 명시 적 getter 메소드 필요 '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 어떻게하면 '더 엄격한 오류가 발생 했습니까?' 너도 해봤 니? –

관련 문제