如果在Clojure中休息

Teo*_*ing 2 clojure

我试图找出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在函数中"中断"处理并返回结果?

Art*_*ldt 5

使用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社区产生了许多口号,包括"价值导向编程"