Clojurescript:合并两个地图会生成两个地图的列表,而不是具有新值的单个地图

Clojurescript: merging two maps produces a list of two maps, instead of a single map with the new values

正在尝试编写一个接受 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})

我缺少什么来生成具有我需要的值的单个地图?

解构[x & y] 保证 y 将是第一个之后的所有参数的序列。如果您只想拥有一个可选参数,请改用多个参数。此外,不需要您的 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})]
     ...)))