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

SMT*_*MTF 5 string file-io vector clojure

考虑以下:

=> (even? (count []))
true
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在考虑(假设我的文件是空的):

(odd? (count (str/split (slurp my-file) #"\|")))
true
Run Code Online (Sandbox Code Playgroud)

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

=>(str/split (slurp my-file) #"\|")
[""]
Run Code Online (Sandbox Code Playgroud)

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

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

Bri*_*per 7

clojure.string/splitjava.util.regex.Pattern/split做分割.有关Java的解释请参阅此问题.即,split即使模式根本不匹配,也会在模式的第一次匹配之前返回所有内容作为第一次分割.

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

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