2016-04-24 7 views
2

url,api-keyとオプションのクエリパラメータマップを取る関数を作成しようとしています。Clojurescript:2つのマップをマージすると、新しい値を持つ単一のマップではなく、2つのマップのリストが生成されます。

全くクエリのparamsが存在しない場合は、このコードは動作します:

(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}) 

は何私は私が必要とする値で単一のマップを生成するために欠けているのですか?

答えて

5

destructuring [x & y]は、yが最初の後のすべてのargsのシーケンスになることを保証します。オプションの引数を1つだけ用意したい場合は、代わりに複数の要素を使用します。また、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})] 
    ...))) 
+1

ありがとうございました!それで、後でいくつかのオプションのパラメータをどのように使うことができるかを理解できます。 –

関連する問題