在clojure中,函数参数类型不匹配

时间:2015-06-11 20:07:35

标签: clojure functional-programming lisp

clojure,函数参数是向量,但它需要一个没有问题的映射。

(defn flower-colors [colors]
  (str "The flowers are "
       (:flower1 colors)
       " and "
       (:flower2 colors)))

(flower-colors {:flower1 "red" :flower2 "blue"})
;; -> "The flowers are red and blue"

函数flower-colors假设采用矢量类型参数,但是以地图作为输入,它仍然很好。为什么呢?

1 个答案:

答案 0 :(得分:4)

您误解了函数定义的格式。

在你的功能中,单个参数' colors'是无类型的,可以是任何东西。方括号用于表示参数列表的开头和结尾(即参数的符号包含在向量中以将它们与下面的代码表达式区分开)。所以这个功能:

(defn foo [arg-1 arg-2] 
  { :first arg-1  :second arg-2 } )

(println (foo 1 2))
;=> {:first 1, :second 2}     ; return value

接受2个args并在简单的地图中返回它们。

没有方括号,其他一些标记第一个&最后的论点是必需的。