思考功能類似,但在Clojure中,這是更好,更performatic,少重於JVMClojure的讓VS多參數數量
(defn- on-message
([options ch {:keys [headers delivery-tag]} ^bytes payload ^CompanyProto$Company$Builder company]
(check-id company)
(save company options)
(basic/ack ch delivery-tag))
([options ch ^PersistentHashMap kwargs ^bytes payload]
(on-message options
ch
kwargs
payload
(-> (CompanyProto$Company/newBuilder)
(.mergeFrom payload)))))
或
(defn- on-message [options ch {:keys [headers delivery-tag] ^bytes payload}]
(let [company (-> (CompanyProto$Company/newBuilder) (.mergeFrom payload))]
(check-id company)
(save company options)
(basic/ack ch delivery-tag)))
有沒有理由爲什麼你正在考慮多元化的第一個選項?除非該方法是從其他地方同時使用兩個簽名調用的,否則第二個(使用綁定)肯定不那麼混亂。我相信你也可以在堆棧中保存一個呼叫,這看起來像是一個多層次的呼叫。 –
@ToniVanhala @ToniVanhala我首先做了,但一位朋友說let是壞的並且沒有功能(他是一個erlang開發者),我是功能性的新郎......他說的另一件事就是那個clojure很奇怪不是無堆棧 –
[「let」表達式可能被認爲是應用於值的lambda抽象](https://en.wikipedia.org/wiki/Let_expression),所以它適合函數式編程。 –