Ruby——通过duck类型调用类变量/方法



我正试图通过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

最新更新