2013-01-11 73 views

回答

4

File是指在當前範圍內的File不斷使用MyModule::File,而::File總是指Object::File

p File 
# File 

p ::File 
# File 

module Another 
    module File 
    end 

    p File 
    # Another::File 

    p ::File 
    # File 
end 

因此,::類似於文件系統的根目錄,你在類似於當前目錄中的模塊。

對於當前詞法範圍的面向對象訪問,請參閱Module.nesting

2

當你用一個短名稱(File)引用一個類時,ruby將使用最近範圍內的一個類。看:

module MyModule 
    class File 
    def initialize *args; end 
    end 

    class Foo 
    def initialize 
     @file = File.new 
    end 
    attr_accessor :file 
    end 
end 


f = MyModule::Foo.new 
f.file.class # => MyModule::File 

file2 = File.new 'newfile', 'w' 
file2.class # => File 

所以,Foo認爲比頂級的代碼不同File。但是,如果Foo均使用此代碼:

@file = ::File.new 

然後,它會使用「全局」 File類,而不是本地MyModule。以類似的方式,我們可以在頂級

file2 = MyModule::File.new 'newfile', 'w' 
相關問題