Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure core中有哪些功能?_Clojure_Meta - Fatal编程技术网

Clojure core中有哪些功能?

Clojure core中有哪些功能?,clojure,meta,Clojure,Meta,Clojure meta只有在函数注意这样做并且Clojure核心函数不全局保留meta时才会被保留。我听到的一般经验法则是,收集函数(如conj、assoc等)应该保留meta,但序列函数(如map、filter、take等)不保留meta 是否有一个列表,其中列出了哪些函数可以保存元数据 都是关于类型的。序列函数的行为就像它们对参数调用seq,因此并不总是返回相同类型的对象。集合函数和特定于类型的函数不会调用seq并返回与给定给它们的对象类型相同的对象。这会让他们产生返回相同对象的错觉(这可

Clojure meta只有在函数注意这样做并且Clojure核心函数不全局保留meta时才会被保留。我听到的一般经验法则是,收集函数(如conj、assoc等)应该保留meta,但序列函数(如map、filter、take等)不保留meta


是否有一个列表,其中列出了哪些函数可以保存元数据

都是关于类型的。序列函数的行为就像它们对参数调用
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
方法。不保存元数据的函数通过这些方法执行。而集合函数最终使用特定于其类型的方法