惯用的 Clojure 函数别名

Idiomatic Clojure function alias

在 Clojure 中为函数设置别名的最惯用的方法是什么? 这两种方法在执行方面有什么不同吗?

示例取自 Om(Clojurescript,但 Clojure 中的语法是相同的):

(defn query->ast
  "Given a query expression convert it into an AST."
  [query-expr]
  (parser/query->ast query-expr))

(def query->ast
  "Given a query expression convert it into an AST."
  parser/query->ast)

我更喜欢 def 而不是 defn

defn版本

  • 有一个插入的函数调用,可能会也可能不会被省略;
  • 仅限于 arity 1,而 def 版本具有所有 arity 原来的。