在clojure中为什么从空文件中拆分字符串会返回1个元素?

时间:2011-06-21 21:29:37

标签: file-io vector clojure string

请考虑以下事项:

=> (even? (count []))
true
到目前为止一切顺利。现在考虑(假设我的文件是空的):

(odd? (count (str/split (slurp my-file) #"\|")))
true

错误...为什么从空文件返回的向量不均匀(零)?

=>(str/split (slurp my-file) #"\|")
[""]

啊,有人可以解释为什么在这种情况下会返回一个空字符串吗?

我正在尝试确定文件中是否有奇数记录。

1 个答案:

答案 0 :(得分:7)

clojure.string/split使用java.util.regex.Pattern/split进行拆分。有关说明,请参阅this question about Java。也就是说,split返回模式第一次匹配之前的所有内容作为第一次分割,即使模式根本不匹配。

测试集合(列表,数组,映射,字符串等)是否为空的规范方法是在其上调用seq,这将为空集合返回nil

(defn odd-number-of-records? [filename]
  (let [txt (slurp filename)]
    (when (seq txt)
      (odd? (count (str/split txt #"\|"))))))