gpt4 book ai didi

Ruby:在 Struct 中定义常量的语法

转载 作者:数据小太阳 更新时间:2023-10-29 07:45:55 25 4
gpt4 key购买 nike

考虑以下(正确的)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 的 block 的理解是 self 绑定(bind)到 Outer::Inner,事实上,我们可以看到方法(fun)附加到了Inner类;但是 CONST 显然不是。

最佳答案

发生这种情况是因为常量是在当前命名空间 中定义的。 classmodule 关键字定义了命名空间,但 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

关于Ruby:在 Struct 中定义常量的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53725741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com