0

我有以下代码

def assert
  raise "Assertion failed!" unless yield
end

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

这里发生了两件事,我需要更多地解释他们到底在做什么。

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

  2. 产量有什么作用?它是否执行大括号中的内容,它是否只适用于真/假?

4

1 回答 1

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

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

于 2014-02-11T04:30:50.020 回答