以下代码让我有些惊讶。
user> (def bla (filter #(throw (Exception. %)) ["lol" "foo"]))
;; => #'user/bla
user> (prn bla)
Execution error at sun.reflect.NativeConstructorAccessorImpl/newInstance0 (NativeConstructorAccessorImpl.java:-2).
lol
(
user> (prn bla)
()
;; => nil
user>
def
不抛出是预期的,第一个prn
抛出也是预期的。
出乎意料的是,第二个prn
返回空列表。
深入挖掘后,发现在懒惰序列上移除:once
元数据后,我将获得预期的行为,即第二个prn
也会抛出。