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页面,并对其进行解析,而不是解析多个页面。希望这能帮助任何和我走同一条路的人。