我遇到了两种调用文件类的方法:File
和 ::File
有人能够解释一下这两者之间的区别,并且使用这两种方法的不同原因吗?
我遇到了两种调用文件类的方法:File
和 ::File
有人能够解释一下这两者之间的区别,并且使用这两种方法的不同原因吗?
File
指的是当前作用域中的File
常量,而::File
始终指的是Object::File
。
p File
# File
p ::File
# File
module Another
module File
end
p File
# Another::File
p ::File
# File
end
::
类似于文件系统的根目录,而您所在的模块类似于当前目录。当你使用短名称(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'