命名参数在Clojure中起作用

时间:2011-04-12 14:26:43

标签: functional-programming clojure

这段代码在“Clojure的喜悦”中讨论了Clojure中的命名参数:

(defn slope [& {:keys [p1 p2] :or {p1 [0 0] p2 [1 1]}}] 
   (float (/ (- (p2 1) (p1 1))
             (- (p2 0) (p1 0)))))

(slope :p1 [4 15] :p2 [3 21])

功能本身,我明白 - 解构没有问题 - 但我不理解这个问题 我们是否将四个论点传递给斜率?如何将矢量分配给:p1和:p2?

1 个答案:

答案 0 :(得分:8)

你正在向坡度传递四个论点,是的。 []的{​​{1}}部分指定了参数,其中slope表示“将所有其他参数粘贴到此表单中”,然后指定它正在查找形成带有键的映射的参数&p1(如果不存在则提供默认值)。