尝试编写一个带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})
使用我需要的值制作单个地图我错过了什么?
答案 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})]
...)))