Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何访问扩展模块类变量?_Ruby_Inheritance - Fatal编程技术网

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

Ruby 如何访问扩展模块类变量?,ruby,inheritance,Ruby,Inheritance,我有以下类,我想将所有desc字段保存到一个数组中 我将在多个类中使用它,所以我想为了节省一些输入,我将使用模块description module Describe @@interactive = [] def desc(desc) @desc = desc end def method_added(method) @@interactive.push(@desc) @desc = nil end end 这就是课堂上的样子 class Dog

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

我将在多个类中使用它,所以我想为了节省一些输入,我将使用模块
description

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
但是我无法访问
交互式
数组。我不能使用类,因为如果我尝试使用继承,则找不到函数
desc
。当我尝试使用
include
而不是
extend
时,也会出现同样的情况

如果我继续使用
extend
,是否有办法访问交互式阵列?我处理这个问题的方式不对吗?是否有办法使
include
在我的其余代码之前运行,以便找到方法
desc

我试图实现的是动态文档。我试图返回到另一个我无法控制的程序,方法名称,参数和每个方法的描述。我只问了上面问题中的描述,因为我的主要问题是我不知道如何访问变量。我可以只使用代码注释并解析这些注释,但我想让任何后来的程序员明白我的意图,并防止任何无意的注释事故。

希望这有助于:

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"]
模块描述
@@交互式=[]
def交互式
@@互动的
结束
def描述(描述)

@@交互式我不想在代码中这样做,而是对代码库运行
rdoc
,然后使用:

`ri method`
从命令行检索信息或告诉他们使用
ri
获取文档

这将利用Ruby中经过良好测试的技术和工具,这也是我们编写代码的方式


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

交互式的
@@interactive的意义是什么?你想用它做什么?按原样,可以累积字符串,但不引用变量。您是否试图将其用于动态文档?此外,为什么<代码>方法>(方法)<代码>使用<代码>方法< /代码>参数但不使用它?我认为您的解释是正确的,但是如果您可以链接到您认为是动态文档的话,那么我可以让您知道。动态文档将与静态文档相反,它创建一次,与运行rdoc或ri时发生的情况类似。动态将由正在运行的程序动态创建,但我不知道它将如何使用,也不知道为什么,因为它在您的代码中,您没有解释您打算如何使用它。抱歉,我没有看到您编辑的注释。我已经更新了问题。希望这已经足够澄清我的意图。请让我知道我是否需要详细说明。只有在我调用
Dog.new
之前,调用
Dog.interactive.inspect
才有效。你知道为什么吗?我将编辑我的帖子,以澄清我是如何使用interactive的,以及我的动机。@Seanny123无法复制这一点,
Dog.interactive
在初始化对象之前或之后都可以正常工作。你使用的是什么版本的Ruby?Andrew?嘿@Seanny123对我也适用。我使用的是1.9.3,但刚刚在1.8.7中进行了测试,它在那里也工作得很好。你用的是哪个版本的Ruby?很抱歉浪费了大家的时间。我意识到我在调用interactive.inspect
而不是类本身。你的代码工作了,我已经接受了答案。在我修改了我的<代码> RI>代码>安装之后,我会考虑这个替代方法。虽然我已经接受了另一个答案,因为它更普遍适用,我会应用你的方法来解决我的问题。因为我无论如何都要创建文档,所以重复使用键入的内容才有意义。感谢您的帮助。应该注意的是,由于“ri”和码等价物“yri”的速度非常慢,如果您要多次检索信息,并且要使用十几种方法,你不应该使用这种方法。你可以随时启动
gem服务器
并将它们重定向到适当的页面,或者使用rdoc生成的HTML输出并提供服务。后来,我发现你可以使用YARD定制模板。因此,可以创建一个包含所有必需数据的自定义HTML页面,并对其进行解析,而不是解析多个页面。希望这能帮助任何和我走同一条路的人。