我认为由于具体的衍生的哲学反对,因此“精炼”不太可能被认为是增强功能。
处理这种情况下的一种方法是在 R 和 Q 中的 impls 调用相同的函数。另一种方法是使用协议的低级实现功能来外部提供扩展。
协议的一个大优点是它们可以外部扩展,在类型之外。实际上,协议只是包含类型到函数实现映射的映射。您可以定义一个 refine 宏,该宏扩展到提取基本实现,使用精炼进行修改,并将这些方法添加到协议映射中。这对我来说要写有点太复杂了,但这是可能的。
您还可以使用多方法和支持关键字层次作为另一种选择(缺点是需要10个多方法或其他数量)。