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假设采用矢量类型参数,但是以地图作为输入,它仍然很好。为什么呢?
答案 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并在简单的地图中返回它们。
没有方括号,其他一些标记第一个&最后的论点是必需的。