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

Kev*_*ker 2 clojure clojurescript

试图写入一个函数,它接受一个url,api-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})
Run Code Online (Sandbox Code Playgroud)

生成具有我需要的值的单个地图我错过了什么?

noi*_*ith 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})]
     ...)))
Run Code Online (Sandbox Code Playgroud)