考虑以下(正确的)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)
Run Code Online (Sandbox Code Playgroud)
为什么我要写Outer::CONST而不是Outer::Inner::CONST?
我传递给块的理解Struct::new是self必然Outer::Inner,而事实上,我们可以看到,该方法(fun)连接到内部类; 但CONST显然不是.
发生这种情况是因为常量在当前命名空间中定义.在class与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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |