完全有道理,认为不应该有太多不同的分发值。但有时候分发值并不是开发者所预期的。
我在生产环境中意外遇到内存泄露,这是在使用关键字作为分发函数时发生的。我的意图是按照第一个参数中字段的值进行分发,但错误地处理了关键字,将其作为函数对待第二个参数作为分发值。
下面是一个简单的示例
```
(defmulti foo :type)
(defmethod foo :default [_ _] nil)
(foo {} (Math/random))
```
我的意图是这样的
```
(defmulti foo (fn [x y]
(:type x)))
```
请注意,我的有误的代码并没有引起任何功能性异常行为,只是由于多方法的缓存机制导致的内存泄露。