我正试图通过duck类型访问一个类变量,下面是代码的样子-
Class Foo
self.league = League.New
在联赛级别中,我有以下
@@some_array = ['A','B','C']
def self.some_array
@@some_array
end
但是,当我使用我的鸭子类型来调用该值时,我会得到一个"未找到方法"错误
league.some_array
我发现,如果我将该方法声明为实例方法,它就会工作——
def some_array
@@some_array
end
但是,我需要声明每个方法两次,在我的应用程序的其他部分,我目前调用League.Some_Array
,因为我只需要这些值,做League.new.对我没有真正的好处
这里的最佳做法是什么?
编辑:如果你要否决这个问题,你至少能告诉我为什么这是一个糟糕的问题吗?谢谢
您可以定义一个类似attr_reader
的方法,该方法适用于类变量。
module ClassAttributes
def cattr_reader cattr
define_singleton_method(cattr) { class_variable_get("@@#{cattr}") }
define_method(cattr) { self.class.send(cattr) }
end
end
class Foo
extend ClassAttributes
@@bar = 10
cattr_reader :bar
end
Foo.bar # => 10
Foo.new.bar # => 10