欢迎!请参阅关于页面以了解更多关于如何进行的工作信息。
MetaFn实例似乎存在高阶调用问题。
(def foo ^:foo (fn [& args]) ) (foo 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) ;; => nil (foo 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) ;;=> Execution error (Error) at (<cljs repl>:1). 1 is not ISeqable (foo 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) ;;=> Execution error (Error) at (<cljs repl>:1). Invalid arity: 22
这体现在Ornament中,当人们在Hiccup组件中有许多子组件时https://github.com/lambdaisland/ornament/issues/4
请注意,函数不是明确表示支持元数据的,因此您处在一定程度上不确定的领域。仅供参考:
确实,一些函数实现支持某些目的的元数据,但我不认为这是您在所有地方都可以期待的工作。
变量也(显然)支持元数据,您可以像上面例子中那样将其放在那里,这样是没问题的。
我觉得我的观点是,如果相关的库依赖于在函数上放置元数据,这似乎值得怀疑(除非它是由库制作的IFn实现)。