Dokumen untuk empty?
mengatakan "Silakan gunakan idiom (seq x) daripada (bukan (kosong? x))". MisterMetaphor menunjukkan bahwa penggunaan seq
sebagai predikat bisa masuk akal bila digunakan di if-let
:
(if-let [s (seq might-be-empty)]
(fn-for-non-empty-seq s)
(fn-for-empty-seq))
Namun, haruskah saya menggunakan seq
untuk menguji ketidakkosongan secara umum? seq
dapat mengubah argumennya ke bentuk lain. Misalnya:
user=> (class (lazy-seq '(1 2 3)))
clojure.lang.LazySeq
user=> (class (seq (lazy-seq '(1 2 3))))
clojure.lang.PersistentList
user=> (class (map inc [1 2 3]))
clojure.lang.LazySeq
user=> (class (seq (map inc [1 2 3])))
clojure.lang.ChunkedCons
Sepertinya membuang-buang siklus jika hanya ingin menguji ketidakkosongan, dan tidak memerlukan pengikatan baru, atau jika saya tidak memerlukan konversi sebelum pengikatan. Bukankah not-empty
merupakan pilihan yang lebih baik dalam kasus seperti itu? Ia mengembalikan nil
jika argumennya kosong, dan argumennya tidak berubah jika tidak kosong.
(if (not-empty [])
"more to do"
"all done")