我知道在我的代码中的某个点,列表只有一个元素,所以我用它来获取它
(first alist)
Run Code Online (Sandbox Code Playgroud)
但是如果列表有多个元素来提醒我错误的情况,我也希望代码能够破解.在Clojure中实现这一目标的惯用方法是什么?
替换first为only(或其他诗歌命名的)函数,其中包含您要进行断言的前提条件:
(defn only [x] {:pre [(nil? (next x))]} (first x))
(only [1])
=> 1
(only [1 2])
=> AssertionError Assert failed: (nil? (next x)) user/only (NO_SOURCE_FILE:1)
Run Code Online (Sandbox Code Playgroud)
这将在包含一个元素以外的任何元素的集合上爆炸。在惰性序列上也能正常工作。
(defn only
"Gives the sole element of a sequence"
[coll]
(if (seq (rest coll))
(throw (RuntimeException. "should have precisely one item, but had at least 2"))
(if (seq coll)
(first coll)
(throw (RuntimeException. "should have precisely one item, but had 0")))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
781 次 |
| 最近记录: |