Дополнительный набор круглых скобок позволяет определить функцию с переменным числом аргументов. Следующий пример определяет функцию, которая может принимать либо один аргумент или два аргумента:
(defn foo
([x] x)
([x y] (+ x y)))
Вы можете увидеть это как определение две функции под одним именем. Соответствующая функция будет вызываться в зависимости от количества аргументов, которые вы предоставляете.
Если определить функцию с фиксированным числом аргументов, следующие две формы эквивалентны:
(defn bar ([x] x))
и
(defn baz [x] x)
Имея это в виду, вы можете понять, компилятор исключение. Вы пытаетесь определить функцию следующим образом:
(defn qux
(([x] x)))
При использовании дополнительного набора скобок, закрытие ожидает первый элемент внутри parenthsesis быть вектором (в скобках). Однако в этом случае первым элементом является ([x] x)
, который является списком, а не вектором. Это ошибка, которую вы получаете.
Спасибо! Я полностью забыл об этой возможности :) – Anonymous