如何访问扩展模块类变量?

时间:2013-06-24 00:13:35

标签: ruby inheritance

我有以下类,我想将所有desc字段保存到数组中。

我将在多个类中使用它,所以我想保存一些输入,我会使用模块Describe

module Describe
  @@interactive = []

  def desc(desc)
    @desc = desc
  end

  def method_added(method)
    @@interactive.push(@desc)
    @desc = nil
  end
end

这就是课堂上的样子。

class Dog
  extend Describe

  desc "Holy"
  def bark
    puts "woof"
  end

  desc "Moly"
  def wag
    puts "wagging"
  end
end

以下是我打算如何使用该代码。

d = Dog.new
puts d.interactive

但我无法访问interactive数组。我不能使用类,因为如果我尝试使用继承,则找不到函数desc。当我尝试使用include而不是extend时会出现同样的情况。

如果我继续使用extend,有没有办法让我访问交互式数组?我是否错误地解决了这个问题?有没有办法让include在我的其余代码之前运行,以便找到方法desc

我想要完成的是动态文档。我试图返回另一个我无法控制的程序,方法名称,参数和每个方法的描述。我只询问上述问题中的描述,因为我遇到的主要问题是我不知道如何访问变量。我可以使用代码注释并对其进行解析,但我想向任何追随我的程序员明确表达我的意图并防止任何无意的评论意外。

2 个答案:

答案 0 :(得分:1)

希望这会有所帮助:

module Describe
  @@interactive = []

  def interactive
    @@interactive
  end

  def desc(desc)
    @@interactive << desc
  end
end

class Dog
  extend Describe

  desc "Holy"
  def bark
    puts "woof"
  end

  desc "Moly"
  def wag
    puts "wagging"
  end
end


puts Dog.interactive.inspect   #["Holy", "Moly"]

答案 1 :(得分:1)

我没有尝试在代码中执行此操作,而是针对代码库运行rdoc,然后使用:

`ri method`

为其检索信息或告诉他们使用命令行中的ri来获取文档。

这将利用Ruby中经过良好测试的技术和工具,并且我们应该如何记录我们的代码。

有关格式信息,请参阅rdoc文档。