断言和大括号在这个例子中做了什么

时间:2014-02-11 03:45:15

标签: ruby yield raise

我有以下代码

def assert
  raise "Assertion failed!" unless yield
end

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

这里有两件事我需要更多解释他们正在做什么。

  1. 大括号和里面的内容到底是做什么的。我有一个普遍的感觉,它以某种方式通过比较,但有什么可以/不能放在那里。我尝试用puts语句替换它似乎忽略了。它做了什么?

  2. 产量是多少?它是否执行大括号中的内容并且它仅适用于true / false?

1 个答案:

答案 0 :(得分:1)

  1. Curly括号是Ruby中的块。
  2. yield关键字将执行传递给方法的块。
  3. 所有Ruby方法都隐式接受块。
  4. assert { swear == "shoot" }实际上将块发送到assert方法。由于块的评估是true,因此不会引发异常。虽然{ swear == "snot head" }为false,但assert方法会引发异常。

相关问题