我有一个定义为常量的类.然后我有一个类方法定义,访问该类常量.这工作正常一个例子:
#! /usr/bin/env ruby class NonInstantiableClass Const = "hello,world!" class << self def shout_my_constant puts Const.upcase end end end NonInstantiableClass.shout_my_constant
我的问题出现在尝试将此类方法移至外部模块,如下所示:
#! /usr/bin/env ruby module CommonMethods def shout_my_constant puts Const.upcase end end class NonInstantiableClass Const = "hello,world!" class << self include CommonMethods end end NonInstantiableClass.shout_my_constant
Ruby将该方法解释为从模块请求一个常量,而不是类:
line 5:in `shout_my_constant': uninitialized constant CommonMethods::Const (NameError)
那么,你们的什么魔术技巧必须让方法访问类常数?非常感谢.
解决方法
这似乎工作:
#! /usr/bin/env ruby module CommonMethods def shout_my_constant puts self::Const.upcase end end class NonInstantiableClass Const = "hello,world!" class << self include CommonMethods end end NonInstantiableClass.shout_my_constant
HTH