【问题标题】:Clojure - syntactic sugar to convert map entries to function params automatically?Clojure - 自动将映射条目转换为函数参数的语法糖?
【发布时间】:2013-04-26 06:18:46
【问题描述】:

假设我有以下 clojure 函数调用:

(def mymap {:a1 1 :a2 2})

(defn my-adder [input-map]
    (let [a1 (:a1 input-map)
          a2 (:a2 input-map)]
      (+ a1 a2)))

(my-adder mymap)

我正在寻找某种方法,通过自动将映射转换为参数来简化 my-adder 函数 - 类似于:

(defn my-adder [(magic-function input-map)]
  (+ a1 a2))

有人可以指出我缺少什么吗?

【问题讨论】:

    标签: function map clojure


    【解决方案1】:

    我认为您正在寻找的是解构。您可以执行以下操作:

    (def mymap {:a1 1 :a2 2})
    
    (defn my-adder [{:keys [a1 a2]}]
          (+ a1 a2))
    
    (my-adder mymap)
    

    You can learn more about it here

    【讨论】:

    • :键!这就是我一直在寻找的。​​span>
    • np,请注意有许多不同的方式可以解构事物。
    • @hawkeye 我可以,但我认为我提供的教程链接比我做得更好。
    【解决方案2】:

    使用可以像下面这样使用。它被称为 Clojure:解构。你可以找到更多here

    (defn my-adder [{a1 :a1 a2 :a2}]
          (+ a1 a2))
    

    【讨论】:

      【解决方案3】:

      除了显示解构的答案之外,您还可以使用 applyvals 如果只需将地图中的 所有 值加在一起就可以了:

      (defn my-adder [m]
          (apply + (vals m)))
      

      【讨论】:

        【解决方案4】:

        或者你可以使用plumbing libary中的fnk函数

        (use 'plumbing.core)
        
        (defnk my-adder [a b] 
          (+ a b))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-06-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多