我是Lisp/Functional/Clojure领域的新手,我有一个JS函数:
function buildString(someInteger) {
var question = "Initial text";
if (someInteger == 1) {
question += " put this string ";
} else if(someInteger == 2) {
question += " oh! another string ";
} else if(someInteger == 3) {
question += " guess what? ";
}
return question;
}
将其重写为Clojure函数的好方法是什么?我已经有一些使用"cond“Clojure宏的代码,但我不确定不可变的字符串”问题“:
(defn build-string [some-integer]
(let [question "Initial text"]
(cond
(= some-integer 1) (str question "Add string one")
(= some-integer 2) (str question "Add string two")
(= some-integer 3) (str question "Add string three"))))
发布于 2018-08-25 04:40:55
如果你只有一些“等号”的检查,我会选择地图。例如。
(str "Initial text" ({1 "Add string one" 2 "Add string two" 3 "Add string three"} some-integer))
或者直接使用condp
。例如。
(defn build-string
[some-integer]
(str "Initial text"
(condp = some-integer
1 "Add string one"
2 "Add string two"
3 "Add string three"
nil)))
(map build-string (range 4))
; => ("Initial text" "Initial textAdd string one" "Initial textAdd string two" "Initial textAdd string three")
我认为这里的关键点是消除重复;不仅消除代码的“长度”,还消除代码的“宽度”。
https://stackoverflow.com/questions/52010587
复制相似问题