检查Ruby类中是否已定义常量的正确方法

检查Ruby类中是否已定义常量的正确方法,ruby,constants,ruby-1.8.7,class-constants,Ruby,Constants,Ruby 1.8.7,Class Constants,在Ruby 1.8.7上的Rails应用程序中,我有一些类被实现为decorator。我一直收到警告-警告:已初始化常量ABC。这里ABC是常量的名称 为了解决这个问题,我使用了本文建议的方法 我的疑问是,const_定义了吗?检查类常量是否已在ruby中定义的正确方法?我清楚地看到,它可以用来检查模块常数 我可以看到defined?方法也可以像本文中提到的那样使用。我试图查找已定义?的文档,但根据我目前的搜索,我没有看到指向其文档的链接 我不确定在这两者中选择哪一个,因为我现在看不出两者之间有

在Ruby 1.8.7上的Rails应用程序中,我有一些类被实现为decorator。我一直收到警告-
警告:已初始化常量ABC
。这里ABC是常量的名称

为了解决这个问题,我使用了本文建议的方法

我的疑问是,
const_定义了吗?
检查类常量是否已在ruby中定义的正确方法?我清楚地看到,它可以用来检查模块常数

我可以看到
defined?
方法也可以像本文中提到的那样使用。我试图查找
已定义?
的文档,但根据我目前的搜索,我没有看到指向其文档的链接

我不确定在这两者中选择哪一个,因为我现在看不出两者之间有什么明显的区别


请建议在这种情况下最好使用哪一种,为什么

关键字
已定义?
已记录在案


最好询问它是否为常数,如果它是常数很重要,请使用
const\u defined?
。如果您只关心它的定义,那么请使用关键字
defined?

,因为您使用的是Ruby 1.8.7,看起来您唯一的选择是
const\u defined?
,因为我在
defined?
中找不到任何文档


如果您使用的是Ruby 1.9,我建议您使用定义的?查看更多信息。

还有一个选项。这是因为Ruby有一个讨厌的
#const_missing
方法,即使在那里也会意外地提供值,其中
#const_的定义将指示false:

对于这样的情况,您可以使用
begin。。。拯救。。。结束
语句:

begin
  M::A; true
rescue NameError
  false
end
#=> true

这可能会有帮助:谢谢你的回答。我使用的是Ruby 1.8.7,如果存在此Ruby版本的文档,请给我指一下。使用定义的常量?类中的方法不应该是问题吗?我知道这是可行的,但我问这个问题的原因是,const_定义了什么?与类相比,它更像是用于模块的,因为它是在下定义的,所以我有一些疑问。你能确认一下吗?谢谢。@boddhisattva,不要使用Ruby 1.8.7,它已经严重过时了。我的意思很糟糕。我求你了,用Ruby2.x。@BorisStitnicky:这些人哪来的Ruby1.8?据我所知,每个主要发行版都进行了更新。甚至OSX@菩萨:模块和类基本上是一样的。事实上,类继承自模块,所以每个类都是一个模块。@BorisStitnicky我完全同意您的观点:)。但有时,当你的决定并不重要时,你必须接受它,直到你找到其他选择。。鉴于社区已经停止支持这个版本的Ruby,我完全理解你的来历。这是因为
定义?
不是一种方法。它是一个类似于运算符的关键字。
begin
  M::A; true
rescue NameError
  false
end
#=> true