如何在clojure中进行一些处理后,从函数返回值。在Java中处理后从函数返回值
private int add() {
int i = 0;
if (i == 0) i++;
if (i == 1) i += 2;
else i += 3;
}
代码,我想用我们的,但有太多的if语句,因此我不确定如何退还。
如何在clojure中进行一些处理后,从函数返回值。在Java中处理后从函数返回值
private int add() {
int i = 0;
if (i == 0) i++;
if (i == 1) i += 2;
else i += 3;
}
代码,我想用我们的,但有太多的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)))))
你不需要3个IFS为那。你可以这样做:'i + =(i <= 1)?我+ 1:3;' – jeremy
@Nile我正在谈论这个代码在clojue – aceminer
@尼尔,看起来不正确的我。应该更像'i + =(i <= 1)? 3-i:3;(当然,这两个都忽略了负数的可能性)。 – amalloy