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

在clojure中,函数参数类型不匹配,clojure,functional-programming,lisp,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" 函数flowe

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"

函数flowercolors假定采用向量类型参数,但使用映射作为输入,仍然可以。为什么?

您误解了函数定义的格式

在函数中,单个参数“colors”是非类型的,可以是任何类型。方括号用于表示参数列表的开始和结束(即,参数的符号被包装在向量中,以区别于以下代码表达式)。所以这个函数:

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

(println (foo 1 2))
;=> {:first 1, :second 2}     ; return value
接受2个参数并在简单映射中返回它们


如果没有方括号,则需要使用其他方法标记第一个和最后一个参数。

您误解了函数定义的格式

在函数中,单个参数“colors”是非类型的,可以是任何类型。方括号用于表示参数列表的开始和结束(即,参数的符号被包装在向量中,以区别于以下代码表达式)。所以这个函数:

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

(println (foo 1 2))
;=> {:first 1, :second 2}     ; return value
接受2个参数并在简单映射中返回它们


如果没有方括号,则需要使用其他方法标记第一个和最后一个参数。

为什么说参数是向量?在我看来,它不像一个向量,看起来像一个名为colors的映射……你的意思是,在函数形式中(定义函数的地方),参数colors的名称包含在一个向量中吗?为什么你说参数是一个向量?在我看来,它不像一个向量,看起来像一个名为colors的映射……你的意思是,在函数形式(定义函数的地方)中,参数colors的名称包含在一个向量中吗?