为什么:否则不是(其他)在clojure?

ste*_*hin 24 clojure

在Clojure中你可以写:

(cond (= 1 2) 1 
      :else 5)
Run Code Online (Sandbox Code Playgroud)

在Scheme中,等价物将是:

(cond ((= 1 2) 1)
       (else 5))
Run Code Online (Sandbox Code Playgroud)

:else 5语法不作为是一致的(else 5).在Clojure中以这种看似不一致的方式实现else语法的原因是什么?

mik*_*era 36

:else 这实际上是一个聪明的伎俩:

  • cond期望条件/值对 - 和:else只是Clojure中"truthy"值,因此它保证条件满足.(除了null或false之外的任何东西都算作"真相").如果你喜欢,你可以同样使用":donkey"作为保证的真实条件值.
  • 然而,:否则也向人类读者传达意义(即,如果其他条件都不匹配,则该条件是要执行的条件

所以它真的只是一种适用于cond表达的惯例,对人类读者来说很有意义.


Joo*_*aat 27

我认为(else 5)不太一致.(cond ...)参数表示为条件 - 值对.:else value是一致的,因为:else它只是一种惯例 - 它起作用,因为:else它只是一个总是如此的表达式.根本没有特别的规则:else.