gpt4 book ai didi

ruby - 如何判断一个Constant是否定义在模块命名空间内,而不是全局命名空间?

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

我有两个同名的Const;一个是全局常量,另一个定义在命名空间 Admin 下。但是我需要区分它们;全局的已经定义了,范围的如果还没有定义则需要自动定义:


A = 'A Global Const'  
module Admin
A = 'A Const within the Admin namespace' if const_defined? 'A' # always true and the Admin::A can never be defined!
end
puts A # => 'A Global Const'
puts Admin::A # => NameError: uninitialized constant Admin::A
# the Admin::A will never be defined.

但是如果全局A被定义了,“const_defind?”部分将始终返回 true!
我什至尝试过:


... if defined? A  
... if self.const_defined? 'A'
... if Object.const_get('Admin').const_defined? 'A'

永远正确!
我需要区分它们,因为我需要使用 A 中的 A 和 Admin::A 两种形式;
像公共(public)使用的 PostsController 和管理员使用的 Admin::PostsController 的情况;
帮助!

最佳答案

您应该尝试确定两者的范围以只测试您想要的那个

module Adm
A = "FOO"
end
defined?(A) # -> nil
defined?(Adm::A) # "constant"
defined?(::A) # -> nil
A = "BAR"
defined?(::A) # -> "constant
::A # => "BAR"
Adm::A # => "FOO"

关于ruby - 如何判断一个Constant是否定义在模块命名空间内,而不是全局命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3398590/

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