所以我有一個函式 do_stuff 可以接受 0 或 1 個引數,如下所示
(defn do_stuff
([]
(println "no arguments here"))
([arg]
(println "here's the argument"))
(defn -main
[& args]
(do_stuff (if args (apply str args))
如何從 if 陳述句中不回傳任何引數,以便列印“這里沒有引數”字串?編輯:使用 when 而不是 if 回傳 nil,這仍然是一個引數?
uj5u.com熱心網友回復:
使用多重定義
應用您從中學到的do_stuff教訓-main:
(defn -main
([] (do_stuff))
([& args] (do_stuff (apply str args))))
使用if(或cond)外化條件
沒有分支的if運算式仍然回傳,但回傳不是什么都不回傳。那就是你不能用一個or運算式讓它什么都不回傳。至少不是像 Clojure 這樣的函式式語言。elsenilnilifwhen
您也可以if像這樣外部化您的:
(defn -main
[& args]
(if args
(do_stuff (apply str args))
(do_stuff)))
使用apply
@EugenePakhomov 的想法:
(defn -main
[& args]
(apply do_stuff (if args [(apply str args)] [])))
但我的想法是:把(apply str args)零件放在里面do_stuff怎么樣?
(defn do_stuff
([]
(println "no arguments here"))
([& args]
(let [arg (apply str args)]
(println "here's the argument"))))
因為那樣你就可以非常優雅地做到:
(defn -main [& args]
(apply do_stuff args))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/482610.html
上一篇:無法弄清楚這個分段錯誤
下一篇:請幫我找出我錯過了什么案例
