在許多語言中,如果你寫沿Clojure有短路邏輯嗎?
if (foo() || bar() || foobar()) { /* do stuff */ }
和Foo(東西線)返回true,則巴()和foobar的()將不進行評估。
假設我有以下的Clojure代碼:
(let [a (simple-function args)
b (complex-function args)
c (too-lazy-to-optimize-this-function args)]
(or a b c))
如果計算結果爲真,將B和C也進行評估,還是會被忽略?
謝謝!
我接受這一個,因爲它討論疑難雜症,我是不知道的。 – Joel
這不是一個難題,而是你必須瞭解除懶惰序列以外的所有事情,以及對它們有效的功能。因爲它是一個宏,所以'或'短路,它擴展到http://bit.ly/u8xnms。如果它是一個函數,它會評估它的論點。相反,它會擴大到一個if,這是一種特殊的形式和短路。 – gtrak