我发现在尝试使用字面量映射作为dispatch-fn时遇到了defmulti
宏的一个小边缘情况。
(defmulti frob {:dispatch :map})
根据它的参数列表,attr-map?
参数是可选的,所以映射应该被解析为其必选的dispatch-fn
。但是它被当作变量元数据映射,函数被设为nil
。
(frob :dispatch) ;; => 运行错误 (NullPointerException) 在 scratch/eval68113 (REPL:169)。;; 无法调用 "clojure.lang.IFn.invoke(Object)" 因为 "this.dispatchFn" 为空
显然,使用映射来分发多方法不是很合适(相当于从参数到分发值的闭合映射),但它可能是一个需要考虑的例子。