Clojure 关于债务来源的问题
我忍不住注意到,作者更喜欢多次调用Clojure 关于债务来源的问题,clojure,Clojure,我忍不住注意到,作者更喜欢多次调用(第一选项),而不是缓存结果: [docstring (if (string? (first options)) (first options) nil) options (if (string? (first options)) (next options) options) m (if (map? (fi
(第一选项)
,而不是缓存结果:
[docstring (if (string? (first options))
(first options)
nil)
options (if (string? (first options))
(next options)
options)
m (if (map? (first options))
(first options)
{})
options (if (map? (first options))
(next options)
options)
...]
我认为这是可以的(就性能而言),因为它定义了一个宏,它将在编译期间执行
(defmulti…
为例,如果我错了,请纠正我:在编译过程中,宏被展开,其结果是调用特殊的let
表单,然后将其转换为字节码。然后呢(第一个选项)
:
有根的确切含义是什么?什么是未绑定的
很快。varargs表示为一个序列,特别是clojure.lang.ArraySeq
(至少在一定数量的参数之前)
ArraySeq
上的first()
的实现是数组查找
public Object first(){
if(array != null)
return array[i];
return null;
}
是针对在没有根绑定的情况下创建的变量的实现优化
看看如何设置线程区域设置值
user=> ((fn [& args] (type args)) 1 2 3)
clojure.lang.ArraySeq
public Object first(){
if(array != null)
return array[i];
return null;
}