我认为,“精炼”不太可能被视为一项增强功能,因为这涉及到对具体派生的哲学反对。
处理此问题的一种方法是让 R 和 Q 中的 impls 调用相同的函数。另一种方法是使用协议的低级实现功能来外部提供扩展。
协议的一大好处是它们可以外部扩展,超出类型。协议实际上是包含类型到函数 impls 映射的映射。您可以使用一个 refine 宏将其展开以提取基本 impls、修改它们并将这些方法添加到协议映射中。这对我来说有些复杂,但这是可能的。
您还可以使用多态方法和关键字层次支持作为另一种选择(缺点是需要10个多态方法或类似数量的方法)。