如何在Ruby中显式引用核心类?

如何在Ruby中显式引用核心类?,ruby,chef-infra,Ruby,Chef Infra,我和Chef一起工作,遇到了需要使用RubyFile.dirname()class方法的情况。问题是,Chef有自己的Chef::Resource::File类,当在ruby_块资源中执行代码时可以解决这个问题。当存在命名冲突时,如何显式引用核心名称空间文件类?在类名前面加上:,即::File在类名前面加上:,即:File注意,Chef本身不会在这里重载任何内容。问题是您处于::Chef::Resource::RubyBlock中,并且您正试图在“文件”上执行符号查找。Ruby语言向上搜索并找到

我和Chef一起工作,遇到了需要使用Ruby
File.dirname()
class方法的情况。问题是,Chef有自己的
Chef::Resource::File
类,当在
ruby_块
资源中执行代码时可以解决这个问题。当存在命名冲突时,如何显式引用核心名称空间文件类?

在类名前面加上
,即
::File

在类名前面加上
,即
:File
注意,Chef本身不会在这里重载任何内容。问题是您处于
::Chef::Resource::RubyBlock
中,并且您正试图在“文件”上执行符号查找。Ruby语言向上搜索并找到
::Chef::Resource::File
,然后再找到
::File
。正确的解决方案是使用
::File.dirname
,而这只是Ruby的一个特性(如果没有大量的破坏,很难轻易更改)。

请注意,Chef本身不会在这里过载。问题是您处于
::Chef::Resource::RubyBlock
中,并且您正试图在“文件”上执行符号查找。Ruby语言向上搜索并找到
::Chef::Resource::File
,然后再找到
::File
。正确的解决方案是使用
::File.dirname
,而这只是Ruby的一个特性(如果没有大量的破坏,很难轻易更改)。

在这里使用重载可能不是正确的术语。我的意思是Chef显然也有一个文件类,该文件解析为该类,而不是::File类。我的意思是“重载”,类似于对多个函数或方法使用同一名称的意思,尽管我不知道在引用“践踏”其他可用类的类时使用更好的术语。无论是哪种情况,都要感谢您的更正。我已经对原始问题进行了编辑,使用了不同的名字来描述我所经历的行为。在这里,过载可能不是合适的术语。我的意思是Chef显然也有一个文件类,该文件解析为该类,而不是::File类。我的意思是“重载”,类似于对多个函数或方法使用同一名称的意思,尽管我不知道在引用“践踏”其他可用类的类时使用更好的术语。无论是哪种情况,都要感谢您的更正。我对原始问题进行了编辑,使用不同的名字来描述我所经历的行为。