欢迎!请查阅关于页面获取更多有关此功能的详细信息。
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实现)。