Clojure core中有哪些功能?
Clojure meta只有在函数注意这样做并且Clojure核心函数不全局保留meta时才会被保留。我听到的一般经验法则是,收集函数(如conj、assoc等)应该保留meta,但序列函数(如map、filter、take等)不保留metaClojure core中有哪些功能?,clojure,meta,Clojure,Meta,Clojure meta只有在函数注意这样做并且Clojure核心函数不全局保留meta时才会被保留。我听到的一般经验法则是,收集函数(如conj、assoc等)应该保留meta,但序列函数(如map、filter、take等)不保留meta 是否有一个列表,其中列出了哪些函数可以保存元数据 都是关于类型的。序列函数的行为就像它们对参数调用seq,因此并不总是返回相同类型的对象。集合函数和特定于类型的函数不会调用seq并返回与给定给它们的对象类型相同的对象。这会让他们产生返回相同对象的错觉(这可
是否有一个列表,其中列出了哪些函数可以保存元数据 都是关于类型的。序列函数的行为就像它们对参数调用
seq
,因此并不总是返回相同类型的对象。集合函数和特定于类型的函数不会调用seq并返回与给定给它们的对象类型相同的对象。这会让他们产生返回相同对象的错觉(这可能是这种行为的原因),即使事实并非如此。我们可以说,经验法则是,函数在保留类型时保留了元
user> (meta (seq (with-meta (list 1) {:a 1})))
{:a 1}
user> (meta (seq (with-meta (vector 1) {:a 1})))
nil
一定要意识到什么时候涉及懒惰:
user> (type (list 1))
clojure.lang.PersistentList
user> (type (map identity (list 1)))
clojure.lang.LazySeq
user> (meta (seq (with-meta (map identity (list 1)) {:a 1})))
nil
有关在集合上保留meta的函数列表,请参见页面。不保留meta的对象位于页面下方,但返回相同类型的对象时除外
由于添加了惰性和分块序列,因此我不太确定细节,但您可以查看RT
类中的cons
、seq
和seqFrom
方法。不保存元数据的函数通过这些方法执行。而集合函数最终使用特定于其类型的方法