给定以下函数,它接受两个参数(csv-data1和csv-data2,只有两行的矢量矢量和保证不匹配,因此在我的输出中得到cmp-val)。
(defn test-key-inclusion
"Accepts csv-data param and an index, a second csv-data param and an index,
and searches the second csv-data instances' rows (at index) to see if
the first file's data is located in the second csv-data instance."
[csv-data1 pkey-idx1 csv-data2 pkey-idx2 lnam-idx fnam-idx]
(reduce
(fn [out-log csv-row1]
(let [cmp-val (nth csv-row1 pkey-idx1 nil)
lnam (nth csv-row1 lnam-idx nil)
fnam (nth csv-row1 fnam-idx)
temp-rc (first (key-pres? cmp-val pkey-idx2 csv-data2))]
(if-not (nil? cmp-val)
(concat out-log (sorted-map cmp-val (vector lnam fnam))))))
{}
csv-data1))
在函数中使用此条件,
(if-not (nil? cmp-val)
(concat out-log (sorted-map cmp-val (vector lnam fnam))))))
减少回报无。
为什么?
答案 0 :(得分:4)
因为如果cmp-val为nil,那么你从reduce函数返回nil。
有条件的应该是
(if cmp-val
(concat out-log (sorted-map cmp-val (vector lnam fnam)))))
out-log)
请注意,if-not (nil? foo)
相当于if foo