如何在Clojure中测试空向量

Kev*_*rke 13 clojure

在Clojure中测试空向量的最佳方法是什么?我预计这将打印错误:

(if [] "true" "false")
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.这样做:

(if (> (count []) 0) "true" "false")
Run Code Online (Sandbox Code Playgroud)

但是不实用 - 是否有较短的构造?

mis*_*off 30

使用标准谓词 (empty? list)

  • 另外,在尝试确定列表是否为空时,您应该使用(seq list). (7认同)

mik*_*era 18

我在Clojure代码中看到的检查非空列表的最常见方法是使用seq.如果集合为空,则返回nil,否则返回有效的seq对象.

用法示例:

(seq [])
=> nil

(seq nil)
=> nil

(seq [1 2 3])
=> (1 2 3)         ;; note this is a "true value"

(if (seq [1 4 6]) "true" "false")
=> "true"

(if (seq []) "true" "false")
=> "false"
Run Code Online (Sandbox Code Playgroud)

你也可以用空?测试相反的(即测试空集).请注意空?在clojure源代码中实现,(not (seq coll))因此您可以安全地知道这两种方法基本相同.