在 clojure 中进行一些处理后,如何从函数返回值。
Java中的代码
private int add() {
int i = 0;
if (i == 0) i++;
if (i == 1) i += 2;
else i += 3;
}
我曾想过使用 let 但 if 语句太多,因此我不确定如何返回。
在 clojure 中进行一些处理后,如何从函数返回值。
Java中的代码
private int add() {
int i = 0;
if (i == 0) i++;
if (i == 1) i += 2;
else i += 3;
}
我曾想过使用 let 但 if 语句太多,因此我不确定如何返回。
最简单的音译是只为 的每个新值命名新的局部变量i
,如下所示:
(defn add []
(let [i 0
i' (if (= i 0) (inc i) i)
i'' (if (= i' 1)
(+ 2 i')
(+ 3 i'))]
i''))
所有这些本地变量都可以被命名i
,而不是调用它们i'
,但我不想混淆不变性的问题:我们没有i
以任何方式进行修改,只是引入了一个新的命名本地绑定到一个新值。
您的代码模式是:
if-else-expr(init-value) -> value1
if-else-expr(value1) -> value2
if-else-expr(value2) -> value3
if-else-expr...
它可以在 clojure 中实现为
(defn add []
(-> init-value
(#(if (expr1-1) (expr1-2) (expr1-3)))
(#(if (expr2-1) (expr2-2) (expr2-3)))
(#(if (expr3-1) (expr3-2) (expr3-3)))
...))
在你的情况下:
(defn add []
(-> 0
(#(if (= % 0) (+ % 1) %))
(#(if (= % 1) (+ % 2) (+ % 3)))))