2014-02-11 37 views
0

做我有以下代码什么断言和大括号在这种情况下

def assert 
    raise "Assertion failed!" unless yield 
end 

swear = "shoot" 
assert { swear == "shoot" } 
assert { swear == "snot head" } 

有两件事情怎么回事,我需要对他们究竟在做什么进一步的解释。

  1. 大括号和里面的东西究竟做什么。我有一个普遍的感觉,它在某种程度上通过了比较,但是可以/不能放在那里。我尝试用puts语句替换它似乎忽略。它有什么作用?

  2. 产量是做什么的?它是否执行花括号中的内容,并且它只能在真/假上工作?

回答

1
  1. 花括号是在Ruby中块。
  2. yield关键字将执行传递给方法的块。
  3. 所有Ruby方法隐式接受块。

assert { swear == "shoot" }实际上发送块到assert方法。由于该块的评估是true,所以不会引发异常。虽然{ swear == "snot head" }为假,但assert方法引发异常。

相关问题