gpt4 book ai didi

Ruby - 禁止常量重新定义

转载 作者:数据小太阳 更新时间:2023-10-29 08:40:28 24 4
gpt4 key购买 nike

在 Ruby 中重新定义一些常量(例如 FOO = 'bar')会生成警告 already initialized constant

我正在尝试编写一种 ReallyConstants 模块,这段代码应该具有以下行为:

ReallyConstants.define_constant(:FOO, 'bar') #=> sets the constant ReallyConstants::FOO to 'bar'
ReallyConstants::FOO #=> 'bar'
ReallyConstants::FOO = 'foobar' #=> this should raise an Exception

也就是说,常量重定义应该产生异常。

这可能吗?

最佳答案

只需将您的常量限定在一个模块内,然后使用 Module#freeze 禁止进一步修改该模块。

例如

module Really
CONSTANT = :foo
freeze
end

Really::CONSTANT = :bar
-> RuntimeError: can't modify frozen Module

请注意,这并没有说明分配给常量的值的可变性。为此,请使用 Object#freeze

在需要重新加载代码的环境中(例如在 Rails 应用程序中),这种方法会给您带来很大的麻烦。在那里,您必须跳过一个额外的环节,在定义模块之前检查模块是否已经定义。

通常,Ruby 中的防御性编程比它的值(value)更麻烦。你担心什么?

关于Ruby - 禁止常量重新定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8021819/

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