2015-11-15 47 views

回答

1

該宏是相當微不足道的寫作。我不相信這是慣用的,因爲它增加了一個額外的抽象層,而不增加可讀性。有人閱讀這樣的代碼,必須看看宏,以弄清楚發生了什麼,而不是簡單的if。

宏:

(defmacro get-if 
    [p v d] 
    `(let [val# ~v] 
    (if (~p val#) 
     val# 
     ~d))) 

或許,如果你告訴更多關於什麼是您的使用情況下,我可以幫助你嗎?

+0

感謝,我不希望目標的表達被複制,但我發現我可以使用'消除重複讓'關鍵字。 – Yeonho

+0

是的,這當然是慣用的。 –

2

通常最好是使用功能,而不是宏,如果它是可能的:

(defn get-if [pred v default] 
    (if (pred v) v default))