我开始使用Clojure并注意到虽然Clojure的or行为被称为返回第一个truthy值,但传递两个falsey值只or返回第二个值:
user=> (or false false)
false
user=> (or false nil)
nil
Run Code Online (Sandbox Code Playgroud)
我的经验主要是在Python中,其中
>>> False or False
False
Run Code Online (Sandbox Code Playgroud)
这些不相似吗?我理解这是每个http://clojuredocs.org/clojure.core/or的预期行为,并遵循建议查看http://clojuredocs.org/clojure.core/if,但仍不清楚为什么会如此.
我认为doc字符串表明了这一点.它永远不会承诺返回虚假 - 只是为了在没有其他人留下的情况下返回最后一个论点.
user=> (doc or)
-------------------------
clojure.core/or
([] [x] [x & next])
Macro
Evaluates exprs one at a time, from left to right. If a form
returns a logical true value, or returns that value and doesn't
evaluate any of the other expressions, otherwise it returns the
value of the last expression. (or) returns nil.
nil
Run Code Online (Sandbox Code Playgroud)
另外,我不知道你在哪里有or两个参数的想法.
user=> (or nil false false false 1 (println "this is not printed"))
1
user=> (or nil false)
false
user=> (or true)
true
user=> (or)
nil
Run Code Online (Sandbox Code Playgroud)