Java在Clojure中的开关等效物?

2022-09-01 04:54:50

在Clojure中,Java的构造有等价物吗?如果是,那是什么?如果不是,我们是否必须使用梯子来实现它?switchifelse


答案 1

案例是一个不错的选择,正如Jan所指出的那样

cond在许多相关情况下也非常有用,特别是如果您想在计算一系列不同条件表达式的基础上进行切换,例如

(defn account-message [balance]
  (cond 
    (< balance 0) "Overdrawn!"
    (< balance 100) "Low balance"
    (> balance 1000000) "Rich as creosote"
    :else "Good balance"))

请注意,cond 的结果由第一个匹配表达式确定,因此负余额将显示“透支!” 即使它也与低余额情况匹配。

[我已经编辑了代码 - 删除了末尾的额外括号以使其正常工作]


答案 2

试试宏:case

(case (+ 2 3)
  6 "error"
  5 "ok")

或默认值

(case (+ 2 3)
  5 "ok"
  "error")

请记住,根据文档

不计算测试常量。它们必须是编译时文本,并且不需要引用。(...)

ClojureDocs上查看更多例子。


推荐