2016-12-15 81 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 

我期待 「鮑勃」,而是我得到:

uni nitialized class variable @@ my_name in A :: C

回答

-1

如果您嘗試預先添加模塊,該怎麼辦?它爲類添加了一個模塊,但是在類的方法之前插入它們。這是一種確保如果有變量命名衝突的方式,該模塊將勝出。

我的意思是這更多的是作爲評論,但我的用戶評價還不夠高的評論,所以我很抱歉,如果這是不公平的。

0

如果使用Module#class_variable_get它的工作:

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

我認爲問題是,在module C當你說puts @@my_name它還不瞭解@@my_name,因爲在module C你從來沒有設置(它設置在module BC不知道關於B)。