我是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的包装并将委托传递为块。但我仍然无法理解这段代码的工作原理。
有人可以帮帮我吗?只是对这项工作的简要解释答案 0 :(得分:0)
简短的解释是:你还没有在那里调用这个方法,你只是在调用be_a_multiple_of
匹配器时调用它,并且在发生这种情况时已经定义了该方法。
在声明方法或块时,解析器不检查方法是否已定义 - 因为该方法可能稍后定义,或者可能存在missing_method
fall_back。