[英]How do I get a default value from first in Clojure?
(> 1 (first []))
返回NullPointerException。
如何使(first [])
返回默認值,例如0,而不是nil?
您可以使用or
繞過nil
值
(> 1 (or (first []) 0))
因為在Clojure中, nil
被視為虛假值。
or
解決方案適用於這種情況。 對於其中的情況下or
是不夠的,另一種選擇是使用with-exception-default
的宏從圖珀洛庫 :
(with-exception-default default-val & body)
"Evaluates body & returns its result. In the event of an exception the
specified default value is returned instead of the exception."
(with-exception-default 0
(Long/parseLong "12xy3"))
;=> 0
恕我直言,您應該清楚地定義設計中的功能對象
因為您需要功能:給定集合coll提取第一個元素或默認為0,那么您應該為此使用一個單獨的函數。
例如
(defn first-or-zero [coll]
(if (seq coll)
(first coll) 0))
盡管編寫起來有點麻煩(並且or
宏的確使您更快地到達了那兒,但您卻錯過了功能強大的FP概念。
a)這樣,您對需要做的事情有純粹的功能描述b)您可以通過證明或通過單元測試來對其進行測試c)您可以在所有地方重復使用它,而對更改的影響最小
FP的一種更有效的實現方式是:
(defn first-or-default
([coll] (first-or-default coll 0))
([coll dflt-val]
(if (seq coll)
(first coll) dflt-val)))
然后只需調用: (< 1 (first-or-default coll 0))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.