我正在使用Reagent編寫一些代碼,其中一部分涉及編寫一些回調和狀態操作。如何將虛擬參數傳遞給clojure lambda?
這些地方中的一些會使用默認參數調用函數,我不想對它們做任何事情。我只想返回一個不變的值。
例如,當我使用類似#(true)
的東西時,我會得到一個異常,而且我必須編寫(fn [_] true)
。有沒有一種方法讓lambda簡寫知道它正在獲取參數而不使用它?
我正在使用Reagent編寫一些代碼,其中一部分涉及編寫一些回調和狀態操作。如何將虛擬參數傳遞給clojure lambda?
這些地方中的一些會使用默認參數調用函數,我不想對它們做任何事情。我只想返回一個不變的值。
例如,當我使用類似#(true)
的東西時,我會得到一個異常,而且我必須編寫(fn [_] true)
。有沒有一種方法讓lambda簡寫知道它正在獲取參數而不使用它?
#(do % true)
但說實話,我只寫了沒有宏的完整版本。它使得它的意圖更清晰。
這是一個恥辱Clojure似乎沒有一個版本的Haskell的const
函數。它接受一個值並返回一個拋出它的參數並返回值的函數。這種情況非常方便。這是微不足道的編寫自己的版本,但是您的圖書館:
(defn const [value]
(fn [_] value))
(some-hof (const true))
有了一定的創造性,它可能不會是難以作出const
支持任意數量的參數。
編輯:
@amalloy指出的Clojure事實上確實有這樣的功能! core/constantly
。
clojure。核心/不斷 – amalloy
@amalloy Pfft。我不知道我是如何錯過的。謝謝。 – Carcigenicate
可能重複[聲明Clojure匿名函數的虛擬(未使用)參數](http://stackoverflow.com/questions/41909132/declare-dummy-unused-parameters-for-clojure-anonymous-function) – Sylwester