在ruby中,我开始看到一种非常正常的做法,包括引用为::ModuleName::ClassName的模块和混合,而在过去,它几乎只是ModuleName::ClassName。
我想在这里得到的是一个像样的理解,为什么这种做法最近更多地出现,以及它的不同之处。
有什么关系呢?
好处是什么(如果先验没有回答这个问题)?
提前感谢您的意见。
发布于 2012-02-22 23:52:56
如果您将::放在开头,您引用的是全局名称空间,否则您引用的是您当前的名称空间。
通常,如果您的类/模块中没有同名的类/模块,则不需要在开始时使用::。
class Customer
def to_s
"Customer global"
end
end
class Order
class Customer
def to_s
"Customer within order"
end
end
def initialize
puts Customer.new
puts ::Customer.new
end
end
Order.new将打印输出
Customer within order
Customer global发布于 2012-02-22 23:55:02
当你使用::ModuleName::ClassName时,你会说:
我希望您在根命名空间中查找
::ModuleName::ClassName,忽略此代码是否在另一个模块中找到。因此,它将始终查找名为::ModuleName::ClassName的类,而不查找其他类
当你像这样说ModuleName::ClassName时,你是在说:
我希望你先看ModuleName::ClassName,但是先看当前的作用域,然后再看其他的作用域。因此,如果您有一个名为MyModule的模块,并且我的模块引用了ModuleName::ClassName,那么首先尝试查找MyModule::ModuleName::ClassName,然后尝试解析::ModuleName::ClassName。
当我像这样定义代码时,我几乎总是使用::ModuleName::ClassName来避免任何命名冲突。
https://stackoverflow.com/questions/9398095
复制相似问题