【发布时间】:2011-08-09 15:36:47
【问题描述】:
有人可以解释以下行为
def iterate
return yield
return "end of iterate"
end
def test_iterate
assert_equal( "end of iterate", iterate { return "end of block" } )
assert_equal( "end of block", iterate { "end of block" } )
end
我知道 Procs(块是什么)应该在它们被调用的范围内返回。 (与 lambdas 不同)考虑到这一点,测试中的两个调用不应该返回“块结束”吗?
此测试通过 'ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]' (OSX 10.6.7)
【问题讨论】:
-
这是否意味着
return从您的测试函数返回,使其在没有达到断言的情况下通过? -
确实如此。 '1 个测试,0 个断言,0 个失败,0 个错误'
-
那么您第二次拨打
iterate... -
我测试了 1.8.7 和 1.9.2,但都没有达到预期的第一个
assert_equal,因为您的第一个块中的return从该方法返回。 -
正确,这是我的一个简单疏忽。 Hammar 正确地说明了第一个测试中的 return 语句退出了 'test_iterate' 块。尽管看起来测试通过了,但实际上测试从未完成。
标签: ruby lambda yield proc-object