在Clojure什麼是測試爲零的慣用方法,如果某些東西是零,然後取代一個值?在clojure如何選擇一個值,如果沒有
比如我做了很多:
let [ val (if input-argument input-argument "use default argument")]
:但我覺得它的repetetive不必使用「輸入參數」的兩倍。
在Clojure什麼是測試爲零的慣用方法,如果某些東西是零,然後取代一個值?在clojure如何選擇一個值,如果沒有
比如我做了很多:
let [ val (if input-argument input-argument "use default argument")]
:但我覺得它的repetetive不必使用「輸入參數」的兩倍。
的「或」確實是慣用的方式來重寫你的示例代碼,但請注意,它不會只更換nil
價值,而且這些Alex的建議這是false
。
如果你想保留價值false
但放棄nil
,您需要:
(let [val (if (nil? input-argument) "use default argument" input-argument)]
...)
因此,慣用的答案可能是測試錯誤,而不是零。順便說一下,由於大多數工作都傾向於在集合上完成,而不是檢查單個值,所以上述答案的地圖版本是:(map#(if(nil?%)「this is nil」%)coll) – 2011-04-18 07:56:05
也許,但是OP要求用慣用的方法來檢查'nil'。我無法評論他應該如何構建圍繞他的例子的未顯示的代碼。 :-) – sanityinc 2011-04-18 08:07:52
只是使用或:
(or input-argument "default")
不錯的:-)。 (if-let [result input-argument] result「default」)我會做一些麻煩的事情。我會記住或! – 2011-04-18 07:57:39
請注意,如果輸入參數爲nil或false,則會給出「默認」值,這可能不是您想要的值。 – 2012-04-28 14:23:40
如果你只綁定變量做得到正確的值,而不是使用它兩次有你一個其他的方式可以做到。核心中有一項功能叫做fnil
。
您可以使用要調用的函數和默認參數調用fnil
。這將返回一個函數,用您提供的默認值替換nils。
你可以根據自己的需要做一件事情。創建一個本地函數。
(let [default-fn (fnil fn-you-want-to call "default-argument")]
(default-fn input-argument))
在一些情況下(在這裏你總是有相同的默認參數),你可以移動到邏輯做到這一點,你的代碼,並把它放在原來的函數(或包裹的功能的情況下,它在其他圖書館)。
(defn fn-you-want-to-call [arg] ....)
(def fn-you-want-to-call-default (fnil fn-you-want-to-call "default-argument"))
然後在你的代碼,它減少到只有
(fn-you-want-to-call-default input-argument)
更多,你可以在這裏找到: http://clojuredocs.org/clojure_core/clojure.core/fnil
如果你這樣做了很多,特別是與輸入參數,那麼也許你是不知道你可以爲函數定義[多重簽名](http://stackoverflow.com/questions/3208347/how-to-create-default-value-for-function-argument-in-clojure)。 – coredump 2015-10-26 02:23:07