2017-03-16 48 views
0

我正在使用Reagent編寫一些代碼,其中一部分涉及編寫一些回調和狀態操作。如何將虛擬參數傳遞給clojure lambda?

這些地方中的一些會使用默認參數調用函數,我不想對它們做任何事情。我只想返回一個不變的值。

例如,當我使用類似#(true)的東西時,我會得到一個異常,而且我必須編寫(fn [_] true)。有沒有一種方法讓lambda簡寫知道它正在獲取參數而不使用它?

+1

可能重複[聲明Clojure匿名函數的虛擬(未使用)參數](http://stackoverflow.com/questions/41909132/declare-dummy-unused-parameters-for-clojure-anonymous-function) – Sylwester

回答

1
#(do % true) 

但說實話,我只寫了沒有宏的完整版本。它使得它的意圖更清晰。

這是一個恥辱Clojure似乎沒有一個版本的Haskell的const函數。它接受一個值並返回一個拋出它的參數並返回值的函數。這種情況非常方便。這是微不足道的編寫自己的版本,但是您的圖書館:

(defn const [value] 
    (fn [_] value)) 

(some-hof (const true)) 

有了一定的創造性,它可能不會是難以作出const支持任意數量的參數。


編輯:

@amalloy指出的Clojure事實上確實有這樣的功能! core/constantly

+7

clojure。核心/不斷 – amalloy

+0

@amalloy Pfft。我不知道我是如何錯過的。謝謝。 – Carcigenicate