2016-12-15 2 views
1

클래스 변수를 사용하여 모듈 포함을 이해하려고합니다. 나는 클래스 변수를 가진 모듈을 포함시키는 것이 클래스 변수에 클래스 변수를 포함시킬 것이라고 생각했다.Ruby 모듈 포함 및 클래스 변수

이 의도 한대로 작동합니다

module A 
    @@my_name = "rick" 
    def print_name 
    puts @@my_name 
    end 
end 

class Y 
    include A 
    extend A 
end 

Y.print_name 

하지만이되지 않습니다 :

module A 

    def self.included(klass) 
    klass.include B 
    klass.extend C 
    end 

    module B 
    @@my_name = "bob" 
    end 

    module C 
    def print_name 
     puts @@my_name 
    end 
    end 

end 

class Y 
    include A 
end 

Y.print_name 

내가 ""를 기다리고 있었다 대신 내가 가진 :

A :: C에서 nitialized 클래스 변수 @@ my_name

답변

-1

모듈을 앞에 추가하려고하면 어떻게됩니까? 이렇게하면 클래스에 모듈을 추가하지만 클래스의 메서드보다 먼저 모듈을 삽입합니다. 이것은 변수 이름 지정 충돌이있는 경우 모듈이 승격되도록하는 방법입니다.

내 의견은 이보다 더 많지만 사용자 평점이 아직 높지 않으므로 의견을 남기지 않아서 사과드립니다.

0

당신이 Module#class_variable_get를 사용하는 경우 그것은 작동합니다 :

module C 
    def print_name 
    class_variable_get(:@@my_name) 
    end 
end 
Y.print_name 
#=> "bob" 

나는 문제는 당신이 puts @@my_name을 말할 때 module C에서 module C에 당신이 그것을 설정하지 않았기 때문에 아직 (즉, @@my_name에 대해 알고하지 않습니다 생각 module BCB을 알지 못합니다.