루비

2012-05-18 2 views
7

에 attr_accessor/인스턴스 변수를 가져옵니다 그래서 난 당신이 #instance_variables를 호출하여 루비의 모든 인스턴스 변수를 얻을 수 있다는 것을 알고 있지만, 아직 설정되어 있지 않은 경우, 그들은 표시되지 않습니다.루비

class Walrus 
    attr_accessor :flippers, :tusks 
end 

w = Walrus.new 
w.instance_variables # => [] 
w.tusks    # => nil 
w.instance_variables # => [:@tusks] 

나는 즉시 attr_accessor에 의해 정의 된 인스턴스 변수의 모든 액세스하려는.

w = Walrus.new 
w.instance_variables # => [:@tusks, :@flippers] 
+0

가능한 중복 ([ATTR의 \의 _reader을 통해 정의 또는 ATTR \ _accessor 된 속성을 얻는 방법]을 http://stackoverflow.com/questions/10006889/how-to-get-attributes-that-were -defined-through-attr-reader-or-attr-accessor) –

답변

15

글쎄, 아직 존재하지 않습니다. 인스턴스 변수는 첫 번째 할당시에 존재합니다. 새로운 인스턴스에서 원한다면 생성자에서이를 터치하십시오.

class Walrus 
    attr_accessor :flippers, :tusks 

    def initialize 
    self.flippers = self.tusks = nil 
    end 
end 

w = Walrus.new 
w.instance_variables # => [:@tusks, :@flippers] 
5

글쎄, attr_accessor은 setter와 getter라는 한 쌍의 메소드를 생성합니다. 나는 목록을 얻을 수있는 기본 방법이 있는지 확실하지 않습니다,하지만 당신은 결과 쌍의 인스턴스 방법을 통해 볼 수 있었다 :

Walrus.instance_methods.find_all do |method| 
    method != :== && 
    method != :! && 
    Walrus.instance_methods.include?(:"#{method}=") 
end 
0

어떻게 방법을 뺀 객체 또는 클래스의 방법을 사용하는 방법에 대해? 반환하는 배열에는 정의 된 속성/메소드 및 getter/accessor에 정의 된 인스턴스 변수가 포함됩니다.

your_instance_name.methods - Object.methods 
your_instance_name.methods - Class.methods