我试图找出Clojure中这个Java的等价物:
public int compute(int x) {
if (x < 0) return 0;
// continue do some computing
return result;
}
Run Code Online (Sandbox Code Playgroud)
是否有惯用的Clojure在函数中"中断"处理并返回结果?
使用Clojure进行编程时,主要的指导原则之一就是所有东西都"返回"一个值,尽管它通常表示为"一切都评估为某种东西".调用函数时,函数的结果是函数中最后一个表达式的结果.
user> (defn foo [] 1 2 3 4)
#'user/foo
user> (foo)
4
Run Code Online (Sandbox Code Playgroud)
有几种形式表达"早退"的想法:
user> (defn compute [x] (cond (< x 0) 0 :default (* x 42)))
#'user/compute
user> (compute 1)
42
Run Code Online (Sandbox Code Playgroud)
要么
user> (defn compute [x] (if-let [y (< x 0)] (* 8 y) (* 4 x)))
#'user/compute
user> (compute 1)
4
Run Code Online (Sandbox Code Playgroud)
或一个简单的if表达.重要的概念是一切都会带来新的价值.这在clojure社区产生了许多口号,包括"价值导向编程"