我遇到过两种调用文件类的方法:File和::File
谁能给我解释一下两者之间的区别,以及使用这两种语言的不同原因?
发布于 2013-01-11 12:56:15
File指的是当前作用域中的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。
发布于 2013-01-11 12:56:04
当您引用具有短名称(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的本地类。以类似的方式,我们可以在顶层使用MyModule::File
file2 = MyModule::File.new 'newfile', 'w'https://stackoverflow.com/questions/14271860
复制相似问题