当然,不应该有太多的不同的调度值。但有时候,调度值并不是开发者想的那个值。
我在生产环境中意外地遇到了一个内存泄漏,当时我正在使用关键字作为调度函数。我的意图是通过对第一个参数中字段的值进行调度,但不幸的是,当找不到关键字时,关键字作为函数处理了多方法第二个参数作为调度值。
以下是简单的再现示例
```
(defmulti foo :type)
(defmethod foo :default [_ _] nil)
(foo {} (Math/random))
```
我的意图是拥有以下内容
```
(defmulti foo (fn [x y]
(:type x)))
```
请注意,我损坏的代码没有造成任何功能错误,只是由于多方法的缓存机制导致了内存泄漏。