首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby中File和::File的区别?

Ruby中File和::File的区别?
EN

Stack Overflow用户
提问于 2013-01-11 12:46:48
回答 2查看 104关注 0票数 3

我遇到过两种调用文件类的方法:File::File

谁能给我解释一下两者之间的区别,以及使用这两种语言的不同原因?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-11 12:56:15

File指的是当前作用域中的File常量,而::File总是指Object::File

代码语言:javascript
复制
p File
# File

p ::File
# File

module Another
  module File
  end

  p File
  # Another::File

  p ::File
  # File
end

因此,::类似于文件系统的根目录,而您所在的模块类似于当前目录。

有关对当前词法作用域的面向对象访问,请参见Module.nesting

票数 4
EN

Stack Overflow用户

发布于 2013-01-11 12:56:04

当您引用具有短名称(File)的类时,ruby将使用最接近作用域的类。看:

代码语言:javascript
复制
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使用以下代码:

代码语言:javascript
复制
@file = ::File.new

然后它将使用“全局”File类,而不是MyModule的本地类。以类似的方式,我们可以在顶层使用MyModule::File

代码语言:javascript
复制
file2 = MyModule::File.new 'newfile', 'w'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14271860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档