在许多语言中,如果你写沿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