欢迎!请查看关于页面以了解更多有关该功能的详细信息。
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
请注意,函数并不是声明支持元数据的,所以您处于一个某种程度上未定义的区域。仅供参考
确实,有的函数实现支持某些目的的元数据,但我不认为这是您在所有地方都应该期待的功能。
Vars 也可以(显然)支持元数据,您可以在上面示例中放置它,这将完全没问题。
我认为我的观点是,如果特定的库依赖于在函数上添加元数据,这似乎有些可疑(除非这是一个由库创建的IFn实现)。