gpt4 book ai didi

ruby - 如何在加载文件时禁用重新定义常量的警告

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:13 26 4
gpt4 key购买 nike

有没有办法在加载特定文件时禁用warning: already initialized constant

最佳答案

问题的解决方案取决于问题的成因。

1 - 您正在更改之前在代码中某处设置的常量的值,或者试图定义一个与现有类或模块同名的常量。解决方案:如果事先知道常量的值会发生变化,就不要使用常量;不要定义与类/模块同名的常量。

2 - 您出于充分的理由想要重新定义常量,但没有收到警告。有两种选择。

首先,您可以在重新定义常量之前取消定义常量(这需要一个辅助方法,因为 remove_const 是一个私有(private)函数):

Object.module_eval do
# Unset a constant without private access.
def self.const_unset(const)
self.instance_eval { remove_const(const) }
end
end

或者,您可以告诉 Ruby 解释器闭嘴(这会抑制所有警告):

# Runs a block of code without warnings.
def silence_warnings(&block)
warn_level = $VERBOSE
$VERBOSE = nil
result = block.call
$VERBOSE = warn_level
result
end

3 - 您需要一个外部库来定义一个类/模块,其名称与您正在创建的新常量或类/模块冲突。解决方案:将您的代码包装在顶级模块命名空间中,以防止名称冲突。

class SomeClass; end
module SomeModule
SomeClass = '...'
end

4 - 与上面相同,但您绝对需要定义一个与 gem/library 的类同名的类。解决办法:你可以把库的类名赋给一个变量,然后清空以备后用:

require 'clashing_library'
some_class_alias = SomeClass
SomeClass = nil
# You can now define your own class:
class SomeClass; end
# Or your own constant:
SomeClass = 'foo'

关于ruby - 如何在加载文件时禁用重新定义常量的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9236264/

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