在Clojure中测试空向量的最佳方法是什么?我预计这会打印错误:
(if [] "true" "false")
但事实并非如此。这样做:
(if (> (count []) 0) "true" "false")
但不实用 - 是否有较短的构造?
答案 0 :(得分:30)
使用标准谓词(empty? list)
答案 1 :(得分: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"
您也可以使用empty?来测试相反的方法(即测试空集)。请注意空?在clojure源代码中实现为(not (seq coll))
,因此您可以安全地知道这两种方法基本相同。
答案 2 :(得分:0)
除了Mishadoff的答案(更具可读性),您还可以与空列表进行比较(并保存两个字符):
(if (= () []) "true" "false")
嗯......我仍然认为我更喜欢Mishadoff的回答。