Ruby - 通过duck typing调用类变量/方法?

时间:2014-10-17 13:02:09

标签: ruby

我试图通过鸭子输入来访问一个类变量,这里是代码的样子 -

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,因为我只需要这些值,但我并没有真正对我做联盟。

这里的最佳做法是什么?

编辑:如果你打算回答这个问题,你能否至少告诉我为什么这是一个糟糕的问题?感谢。

1 个答案:

答案 0 :(得分:1)

您可以定义类似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