File io 在clojure中,为什么从空文件中拆分字符串会返回1个元素?
考虑以下几点:File io 在clojure中,为什么从空文件中拆分字符串会返回1个元素?,file-io,vector,clojure,string,File Io,Vector,Clojure,String,考虑以下几点: => (even? (count [])) true 到目前为止还不错。现在考虑(假设我的文件是空的): 呃。。。为什么从空文件返回的向量不是偶数(零) 啊,有人能解释一下为什么在这种情况下返回空字符串吗 我正在尝试确定文件中是否有奇数条记录。clojure.string/split使用java.util.regex.Pattern/split进行拆分。请参阅以获取解释。也就是说,split返回模式第一次匹配之前的所有内容作为第一次分割,即使模式根本不匹配 测试集合(列表
=> (even? (count []))
true
到目前为止还不错。现在考虑(假设我的文件是空的):
呃。。。为什么从空文件返回的向量不是偶数(零)
啊,有人能解释一下为什么在这种情况下返回空字符串吗
我正在尝试确定文件中是否有奇数条记录。
clojure.string/split
使用java.util.regex.Pattern/split
进行拆分。请参阅以获取解释。也就是说,split
返回模式第一次匹配之前的所有内容作为第一次分割,即使模式根本不匹配
测试集合(列表、数组、映射、字符串等)是否为空的标准方法是对其调用seq
,对于空集合,它将返回nil
(defn odd-number-of-records? [filename]
(let [txt (slurp filename)]
(when (seq txt)
(odd? (count (str/split txt #"\|"))))))
在这种情况下,还可以简单地检查输入字符串的计数
(让[…](when(pos?(count txt))…)
我觉得这有点干净,因为它不会不必要地分配一个立即丢弃的seq对象<与count
相比,数据结构上的code>seq成本较高。
=>(str/split (slurp my-file) #"\|")
[""]
(defn odd-number-of-records? [filename]
(let [txt (slurp filename)]
(when (seq txt)
(odd? (count (str/split txt #"\|"))))))