2014-09-05 1 views
0

Ruby 프로그램에서 attr_reader 및 attr-writer 및 attr_accessor가 Object 메서드 (또는 Objest에 혼합 된 Kernel 메서드) 인 것처럼 사용되는 것을 보았습니다. 그러나 attr_reader 및 attr-writer 및 attr_accessor는 Module이라는 클래스의 일부이며 모든 클래스에서이 클래스를 사용하는 방법을 이해하지 못하고 어떤 클래스를 사용할 수있게합니까?Ruby에서 모듈 calss의 메소드 attr-reader를 어떻게 사용할 수 있습니까?

감사합니다, Ruven

+0

ATTR 리더는 무엇입니까? Calss 란 무엇입니까? attr-writer는 무엇입니까? Objest는 무엇입니까? – sawa

답변

0

그것은 다음과 같이 작동 클래스에 모듈이 변수 인스턴스 @my_variable에 대한 접근을 구성하는

module Attr 
    attr_accessor :my_variable 
end 

class MyClass 
    @my_variable = "hi" 
    def initialize 
    @my_variable = "ho" 
    end 
end 

당신에게 include :

MyClass.include Attr 
c = MyClass.new 
c.my_variable    #=> "ho" 
c.my_variable = "huh?"  #=> "huh?" 
c.my_variable    #=> "huh?" 

당신 extend에 대한 접근자를 구성하는 클래스의 모듈 클래스 인스턴스 변수 @my_variable는 :

보시다시피
MyClass.extend Attr   #=> MyClass 
MyClass.my_variable   #=> "hi" 
MyClass.my_variable = "nuts" #=> "nuts" 
MyClass.my_variable   #=> "nuts" 
c.my_variable    #=> "huh?" 

, @my_variable 변수 인스턴스는 @my_variable 변수 클래스 인스턴스 구별된다. 서로 다른 이름을 가진 것처럼 그들은 공존합니다. 더 일반적으로

, 당신은 클래스 정의 내에서 includeextend를 볼 수 있지만, 효과는 내가 위에서 무엇을하는 것과 같습니다

class MyClass 
    include Attr 
    extend Attr 
    @my_variable = "hi" 
    def initialize 
    @my_variable = "ho" 
    end 
end 
관련 문제