【发布时间】:2014-03-02 00:15:58
【问题描述】:
我是 ruby 新手,我正在通过 RSpec 编写 unittest 来学习 ruby,在定义自定义匹配器时,RSpec 中有一行代码我无法理解。
RSpec::Matchers.define :be_a_multiple_of do |expected|
match do |actual|
do_the_math(actual, expected)
end
def do_the_math(actual, expected)
actual % expected == 0
end
end
据我所知,ruby 是一种脚本语言,编译器会按顺序读取代码。也就是说,您必须在使用它之前定义该方法。但是在 RSpec 中,当我定义一个自定义匹配器时,我可以在调用它之后定义辅助方法。
我已经编写了测试代码来测试如果我在定义它之前调用该方法它将失败的事实,并且我还从 RSpec 中读取了一些源代码,define 方法实际上是 define_method 的包装器并将委托传递为堵塞。但我仍然无法理解这段代码是如何工作的。
有人可以帮帮我吗?只是简单解释一下这是如何工作的
【问题讨论】: