เอกสารสำหรับ empty?
ระบุว่า "โปรดใช้สำนวน (seq x) แทนที่จะเป็น (ไม่ (ว่าง? x))" MisterMetaphor ชี้ให้เห็นว่าการใช้ seq
เป็นภาคแสดงสามารถเข้าใจได้ เมื่อใช้ใน if-let
:
(if-let [s (seq might-be-empty)]
(fn-for-non-empty-seq s)
(fn-for-empty-seq))
ฉันควรใช้ seq
เพื่อทดสอบความไม่ว่างเปล่าโดยทั่วไปหรือไม่ seq
อาจแปลงอาร์กิวเมนต์เป็นรูปแบบอื่น ตัวอย่างเช่น:
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
ดูเหมือนว่าจะเป็นการเสียเวลาหากเพียงต้องการทดสอบความว่างเปล่า และไม่จำเป็นต้องผูกใหม่ หรือถ้าฉันไม่ต้องการการแปลงก่อนการเชื่อมโยง not-empty
จะไม่เป็นทางเลือกที่ดีกว่าในกรณีเช่นนี้ใช่หรือไม่ จะส่งกลับ nil
หากอาร์กิวเมนต์ว่างเปล่า และอาร์กิวเมนต์ไม่เปลี่ยนแปลงหากไม่ว่างเปล่า
(if (not-empty [])
"more to do"
"all done")