Clojure 中的案例
Case cases in Clojure
除了 case
的恒定时间调度之外,还有什么其他原因导致我使用 case
而不是 cond
condp
?
- 假设您确实在处理编译时常量,
case
在语义上比 cond
或 condp
. 更能传达您的条件的性质
case
比 cond
或 condp
. 更简洁
示例:
(cond
(= foo 1) :one
(= foo 2) :two
(= foo 3) :three)
(condp = foo
1 :one
2 :two
3 :three)
(case foo
1 :one
2 :two
3 :three)
我无法对任何性能方面发表评论,但一如既往,这应该是您考虑的最少因素。
即使速度较慢,case
通常比 if
更具表现力:
(defn fact [n]
(case n
0 1
(* n (fact (dec n)))))
...读起来比
好
(defn fact [n]
(if (zero? n) 1
(* n (fact (dec n)))))
这是一个品味问题,但 case
短语是一种更短的形式。
除了 case
的恒定时间调度之外,还有什么其他原因导致我使用 case
而不是 cond
condp
?
- 假设您确实在处理编译时常量,
case
在语义上比cond
或condp
. 更能传达您的条件的性质
case
比cond
或condp
. 更简洁
示例:
(cond
(= foo 1) :one
(= foo 2) :two
(= foo 3) :three)
(condp = foo
1 :one
2 :two
3 :three)
(case foo
1 :one
2 :two
3 :three)
我无法对任何性能方面发表评论,但一如既往,这应该是您考虑的最少因素。
即使速度较慢,case
通常比 if
更具表现力:
(defn fact [n]
(case n
0 1
(* n (fact (dec n)))))
...读起来比
好(defn fact [n]
(if (zero? n) 1
(* n (fact (dec n)))))
这是一个品味问题,但 case
短语是一种更短的形式。