我不禁注意到,笔者更喜欢叫
(first options)
多次超过缓存结果:关于defmulti的来源问题[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
窗体,这反过来又翻译成字节码。那又怎么样?假装我们定义一个FN,而不是一个宏观的,是值得引入一个额外的符号缓存的
(first options)
结果:[f (first options) docstring (if (string? f) f nil) options (if (string? f) (next options) options) f (first options) m (if (map? f) f {}) options (if (map? f) (next options) options) ...]
究竟意味着什么,一个变种
hasRoot
?什么是Unbound
?