不能将第一个参数作为可选项

Ken*_*AUD 3 clojure clojurescript

你有一个函数和可选参数作为第一个也是唯一的参数吗?

从而

(defn foo [& bar] (if (= bar) 1 2))

Shl*_*omi 10

什么& bar是指在功能定义是自变量的所有其余的将被放入一个列表.它不对列表的大小提供任何保证,因此它可以是空的,包含一个或多个项目.

拥有一个且只有一个可选参数的更好方法是让它接受零个或一个参数:

(defn foo
   ([]    (foo 12))
   ([bar] (if (= bar 12) 1 2)))
Run Code Online (Sandbox Code Playgroud)

在这个例子中,如果你调用第一个函数定义,没有arity,它将简单地调用第二个1-arity函数定义,默认值为12.