Clojurescript:合并两个地图会生成两个地图的列表,而不是一个包含新值的地图

时间:2016-04-24 20:57:27

标签: clojure clojurescript

尝试编写一个带urlapi-key和可选的查询参数映射的函数。

如果没有查询参数,则此代码有效:

(defn get-api
  [url api-key & query]
  (let [api-map {:apikey api-key}]
    (let [params (if query
                  (merge query api-map)
                  api-map)]
      (.log js/console (pr-str params))
      (GET url {:params params}))))

(get-api "some/url" "some-key") ;works just fine
(get-api "some/url" "some-key" {:id 123}) ;ends up producing ({:apikey "some-key"} {:id 123})

使用我需要的值制作单个地图我错过了什么?

1 个答案:

答案 0 :(得分:5)

解构[x & y]保证y将是第一个之后所有args的序列。如果您只想拥有一个可选参数,请使用多个arities。此外,您不需要if - nil(或者我在下面使用的空地图)合并得很好。

(defn get-api
  ([url api-key] (get-api url api-key {}))
  ([url api-key query]
   (let [params (merge query {:api-key api-key})]
     ...)))