【问题标题】:Named parameters functions in ClojureClojure 中的命名参数函数
【发布时间】:2011-04-12 14:26:42
【问题描述】:

这段代码在“The Joy of 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 的?

【问题讨论】:

    标签: functional-programming clojure


    【解决方案1】:

    您将四个参数传递给坡度,是的。 slope[] 部分指定参数,其中 & 表示“将所有附加参数添加到此表单中”,然后指定它正在寻找与键 p1 和 @987654325 形成映射的参数@(如果不存在则给出默认值)。

    【讨论】:

    • 我知道了,但是在调用时: (slope :p1 [4 15] :p2 [3 21]) p1 如何获得值 [4 15] 和 p2 [3 21] ?
    • p1 得到值 [4 15] 因为参数 :p1 [4 15] :p2 [3 21] 被视为映射,slope 中的参数块表示将变量 p1p2 绑定到它们在该映射中的对应值。
    猜你喜欢
    • 2020-01-03
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多