我将从here提出一个单独的问题。这让我很困惑。以下是add_mapping方法的定义:
def add_mapping(regexp, &proc)
@test_mappings << [regexp, proc]
end
如何proc
执行此操作并返回结果而不使用call
方法?
答案 0 :(得分:3)
Eric,add_mapping的作用就是在一个名为@test_mappings的数组中添加一个普通的expresion + proc元组。
add_mappings不执行proc。我不知道ZenTest是如何工作的,但它应该在读完所有add_mapping调用后执行proc。
查看ZenTest的代码,并留意@test_mappings,它可以显示执行proc的位置(以及何时)。
答案 1 :(得分:1)
proc可以通过作为块传递给yielding方法来执行,也可以通过手动调用来执行(如你所提到的)。
a_proc = proc { puts "The proc" }
def i_am_yielding
yield
end
a_proc.call
# => "The proc"
i_am_yielding { puts "A block" }
# => "A block"
i_am_yielding(&a_proc)
# => "The proc"
也许有更多的方法,但我想不出任何方法。不过,我不确定你的具体情况意味着什么。 proc是在一个数组中,它被添加到另一个数组(我推测),并且在其他任何地方都没有被引用,因此在你粘贴的那个短片段中不会调用procs。
答案 2 :(得分:0)
是的,根据documentation,[]
是Proc#call
的同义词。