我正在使用打嗝生成一些复选框,后跟标签.原始代码如下所示:
(check-box "check1")
(label "check1" "Check1")
(check-box "check2")
(label "check2" "Check2")
(check-box "check1")
(label "check3" "Check3")
(check-box "check4")
(label "check4" "Check4")
Run Code Online (Sandbox Code Playgroud)
经过大量的修修补补,我得到了以下几点:
(map
(fn [x]
(map
#(get (vector
(check-box x)
(label x (capitalize x)))%)
[0 1]))
["check1" "check2" "check3" "check4"])
Run Code Online (Sandbox Code Playgroud)
哪个有效,但我觉得我不是在一个非常类似于/优化/正确的等等.方式 - 特别是返回一个向量只是为了用get来挖出这些值.有一个更好的方法吗?
Tim*_*dge 11
也许解构是你需要的?
(defn multi-return-fn []
[:1 :2 :3])
(let [[x y z] (multi-return-fn)]
(println x)
(println y)
(println z))
Run Code Online (Sandbox Code Playgroud)
解构也适用于fn参数,循环,for循环等.
正如其他人所指出的那样,你的问题不是很明确,但在正常的Hiccup应用程序的上下文中,假设你可能需要以下是合理的:
(apply concat
(for [boxnum (range 1 5)
:let [lower-name (str "check" boxnum)
upper-name (str "Check" boxnum)]]
[(check-box lower-name)
(label lower-name upper-name)]))
Run Code Online (Sandbox Code Playgroud)
还有很多其他方法可以写出来; 这个人在冗长而清晰的一面犯错,而不是简洁.