考虑以下(正确的)Ruby 程序:
class Outer
Inner = Struct.new(:dummy) do
CONST = 'abce'
def fun
puts(dummy)
end
end
end
obj = Outer::Inner.new(15)
obj.fun
puts(Outer::CONST)
为什么我必须写Outer::CONST
代替Outer::Inner::CONST
?
我对区块的理解传递给Struct::new
那是self
一定会Outer::Inner
,事实上,我们可以看到该方法(fun
) 附属于内部类;但CONST
显然不是。
发生这种情况是因为常数是在当前定义的名称空间. The class
and module
关键字定义名称空间,但是Struct.new
(就像Class.new
) 才不是。
为了在 Struct 范围内定义常量,您必须使用self::
class Outer
Inner = Struct.new(:dummy) do
self::CONST = 'abce'
end
end
Outer::Inner::CONST
#=> 'abce'
Outer::CONST
#=> NameError uninitialized constant Outer::CONST
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)