在 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 它们在一个简单的映射中。
如果没有方括号,将需要一些其他方式来标记第一个和最后一个参数。
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 它们在一个简单的映射中。
如果没有方括号,将需要一些其他方式来标记第一个和最后一个参数。