Clojure:在函数调用中使用 If 语句作为参数,如果没有参数,则不传递任何内容
Clojure: using an If statement as a parameter in a function call, if there are no args, pass nothing
所以我有一个函数 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))
如何 return if 语句中没有参数,以便打印“此处无参数”字符串?
编辑:使用 when 而不是 if returns nil,这仍然是一个论点?
使用 multi-arity 定义
在 -main
上应用你从 do_stuff
中学到的教训:
(defn -main
([] (do_stuff))
([& args] (do_stuff (apply str args))))
使用 if
(或 cond
)外化条件
没有 else
分支的 if
表达式仍然是 returns nil
但返回 nil
并不是什么都不返回。
也就是说,您不能使用 if
或 when
表达式使它只是 returns 什么都没有。至少不是像 Clojure 这样的函数式语言。
您也可以像这样外化您的 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))
所以我有一个函数 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))
如何 return if 语句中没有参数,以便打印“此处无参数”字符串? 编辑:使用 when 而不是 if returns nil,这仍然是一个论点?
使用 multi-arity 定义
在 -main
上应用你从 do_stuff
中学到的教训:
(defn -main
([] (do_stuff))
([& args] (do_stuff (apply str args))))
使用 if
(或 cond
)外化条件
没有 else
分支的 if
表达式仍然是 returns nil
但返回 nil
并不是什么都不返回。
也就是说,您不能使用 if
或 when
表达式使它只是 returns 什么都没有。至少不是像 Clojure 这样的函数式语言。
您也可以像这样外化您的 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))