以下陈述有何不同?
#(not working)
File.exists?("path to file")
#(working)
::File.exists?("path to file")
Run Code Online (Sandbox Code Playgroud)
我在Ruby的Chef框架中使用了上面的语句.
File在您使用的范围中有另一个常量命名File.exists?("path to file").但是当你使用::运算符时,你告诉ruby File在Object(Object::File)中找到常量
可以尝试复制您的问题:
不工作:
class Foo< BasicObject
def self.file_size
File.size(__FILE__)
end
end
p Foo.file_size # uninitialized constant Foo::File (NameError)
Run Code Online (Sandbox Code Playgroud)
原因是File类可用于顶层(即在类的范围内Object)以及任何类的直接/间接子类Object.但Foo与之Object无关Foo,如果你没有告诉它,你将无法访问它,从哪个File类(或常量)实际可访问.
工作:
class Foo< BasicObject
def self.file_size
::File.size(__FILE__)
end
end
p Foo.file_size # => 132
Run Code Online (Sandbox Code Playgroud)
虽然这里也Foo没有关系Object,但是我们明确地(通过使用::常量范围解析运算符)告诉Ruby我们从哪里尝试访问File类(请记住类在Ruby中也是常量)Foo.因此Ruby不反对.
检查代码中是否存在这种情况.
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |