2011-02-15 101 views
15

使用DEFN或Fn可以很容易地創建一個函數,服用忽略它,並返回1一個參數返回1:匿名函數使用#()

(defn ret1 [arg] 1) 
(fn [arg] 1) 

是否有可能與#做到這一點()宏?我不是說使用的東西醜陋或「作弊」之類

#(/ % %) or 
#(if (nil? %) 1 1) 

我的意思是字面上忽略了參數和返回1.我無法找到一個清晰的語法工程。

+0

This works - getting closer ..#(last(list%1)) – Markc 2011-02-15 15:27:55

回答

26

#(do %& 1) ...但(constantly 1)更好。

5

#()語法不能用於按照您的描述需要的方式創建具有未使用參數的函數。這是#()閱讀器宏的限制。

我建議使用#(),而是隻寫(不斷1),這是創建忽略參數的功能非常簡單的方式,而總是返回1

+2

*#()語法不能用於創建具有未使用參數的函數*當然可以(請參閱我的答案),但它是不是最好的方法。 – fogus 2011-02-15 16:08:52

+0

@drcode請承認答案是錯誤的。和你一樣,我從來沒有想過插入一個'%&`來調用一個任意的參數列表。 – Thumbnail 2014-05-31 08:24:03