2014-02-11 34 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方法引發異常。

相關問題