【发布时间】:2014-04-23 20:37:47
【问题描述】:
这是我希望能够支持的脚本示例:
class Testing
include Dialect
url_is 'http://localhost:9292'
end
@page = Testing.new
@page.view
这里需要注意的是:
- 我包含了一个方言模块。 (代码如下所示。)
- 我在类上直接调用 url_is() 方法。
- 我在类的一个实例上调用 view() 方法。
url_is() 方法将设置一个@url 变量。 view() 方法理想地能够读取该变量。那是我似乎无法做到的。以下是支持上述脚本的代码:
module Dialect
module Generator
module Assertion
def url_is(url)
@url = url
end
end
end
end
module Dialect
def self.included(caller)
caller.extend Dialect::Generator::Assertion
end
def view
puts "#{@url}"
end
end
在这里您可以看到,当包含 Dialect 时,我有一个包含方法来扩展我的 Assertion 模块。这允许 url_is() 工作并且 url_is() 确实设置了实例变量。您还可以看到我定义了我希望能够访问该 @url 变量的 view()。
没有发生的是后半部分。我明白为什么我试图从 Dialect 模块中的 Dialect::Generator::Assertion 模块中读取一个变量,但我不确定最好的方法是什么。
我调查了module and class variable scope 和Ruby mixins and instance variables,但没有发现任何可以确定与我所描述的情况相关的信息。
【问题讨论】:
-
模块内的实例变量? :-/
-
@uDaY 我带你觉得这里的实例变量甚至不是合适的方法?我可以使用不同的方法,只要我提供的脚本可以以相同的方式运行:意味着直接在类上使用一些元素,如 url_is(),在类的实例上使用其他元素,如 view()。
-
模块不能像类一样实例化。所以我想知道为什么你需要一个实例变量。