Clojure 当变形还不是问题时,我应该使用协议吗?

Clojure 当变形还不是问题时,我应该使用协议吗?,clojure,Clojure,我还很少使用协议,所以我对正确使用它们没有太多的感觉。在我看来,它们很像Java接口,具有类型和操作很好地分离的优点 除了解决表达式问题外,我还将协议理解为以有意义的方式对功能进行分组的一种方式 因此,如果我有一个记录和一组相关的函数对该记录进行操作,我可以定义一个协议。但是,如果我没有任何其他数据类型参与到该协议中,不知何故,这感觉就像是滥用了该模式。此外,这不是增加了不必要的复杂性吗 关于这个问题,或者至少在何时使用协议以及何时坚持使用普通的旧功能方面,有什么理由可以解释吗 我简短而固执己见

我还很少使用协议,所以我对正确使用它们没有太多的感觉。在我看来,它们很像Java接口,具有类型和操作很好地分离的优点

除了解决表达式问题外,我还将协议理解为以有意义的方式对功能进行分组的一种方式

因此,如果我有一个记录和一组相关的函数对该记录进行操作,我可以定义一个协议。但是,如果我没有任何其他数据类型参与到该协议中,不知何故,这感觉就像是滥用了该模式。此外,这不是增加了不必要的复杂性吗


关于这个问题,或者至少在何时使用协议以及何时坚持使用普通的旧功能方面,有什么理由可以解释吗

我简短而固执己见的回答应该是否定的

在我看来,如果协议中没有其他类型的参与,那么使用协议带来的小小不便就不值得了。当您重新加载定义协议的文件时,协议实例不会自动重新加载,这会让您感到有点困惑。如果您打算让其他地方的代码参与协议,或者甚至有理由相信您可能会这样做,那么它们是值得的,尽管在您的情况下,我不得不说不

我的惯例/经验法则:

坚持使用普通的旧函数,直到您认为可以发现表达式问题的开始,然后使用协议

我简短而固执己见的回答应该是否定的

在我看来,如果协议中没有其他类型的参与,那么使用协议带来的小小不便就不值得了。当您重新加载定义协议的文件时,协议实例不会自动重新加载,这会让您感到有点困惑。如果您打算让其他地方的代码参与协议,或者甚至有理由相信您可能会这样做,那么它们是值得的,尽管在您的情况下,我不得不说不

我的惯例/经验法则:
坚持使用普通的旧函数,直到您认为可以发现表达式问题的开始,然后使用协议