我的担忧不在于开发者错误导致的偶发泄漏,而实际上在于,如果允许(可能是有恶意的或高度随机的)用户输入触及到多方法,可能会造成真正的问题。
我相信大多数Clojure程序员都非常谨慎,如果明确表示出这种缓存行为的话,人们就会三思而后行,考虑不要设置`:default`方法或找到关闭多方法输入的其它方法 - 但这并不清晰。我多年来一直在专业使用Clojure,并不知道`:default`匹配被缓存。
例如,memoize也会引起类似的问题,但我认为在那种情况下(你可能会说很明显)更为清晰,而多方法则对我来说有点微妙。
我不知道是否有解决方案,当然,速度是非常重要的,绝大多数情况下,我确信它是没有问题的。