当然,最好不要有太多不同的分派值。但有时候分派值可能并不是开发者想要的。
我不小心在在生产环境使用关键字作为分派函数时遇到了内存泄漏。我的意图是根据第一个参数中的字段值进行分派,但错误地当该关键字找不到时,将关键字作为一个函数把多方法函数的第二个参数作为分派值处理。
以下是一个简单的重现例子
```
(defmulti foo :type)
(defmethod foo :default [_ _] nil)
(foo {} (Math/random))
```
我的意图是
```
(defmulti foo (fn [x y]
(:type x)))
```
注意,我的有缺陷的代码并未导致任何功能上不正确的行为,只是由于多方法的缓存机制引起了内存泄漏。