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

in clojure, function argument type mismatch

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假设采用向量类型参数,但以地图作为输入,它仍然可以。为什么?

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

在您的函数中,单个参数 'colors' 是无类型的,可以是任何内容。方括号用于表示参数列表的开始和结束(即参数的符号被包装在一个向量中,以将它们与以下代码表达式区分开来)。所以这个函数:

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

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

接受 2 个参数并 returns 它们在一个简单的映射中。

如果没有方括号,将需要一些其他方式来标记第一个和最后一个参数。