具有完全适合多种类型的隐式实例实现我需要为特定类型提供具体实例的模块。以下是我尝试以“蛋糕模式”的精神实现这一点的相似之处。提供具有不同类型参数的相同隐式专用的多个实例
trait Show[ a ]{
def show(a: a): String
}
trait PrimitiveShowInstance[ a ] {
implicit def primitiveShowInstance = new Show[ a ] {
def show(a: a) = a.toString
}
}
object SomeModule
extends PrimitiveShowInstance[ Int ]
with PrimitiveShowInstance[ String ]
with PrimitiveShowInstance[ Boolean ]
上述代码无法编译抱怨继承两次相同的特质。这显然只是一个例子,实际情况下,隐式转换的签名涉及更多 - 它包含其他含义和大量的类型参数。因此,引入“别名”方法不是一种选择,因为由于Scala的语法不可行性,我仍然需要复制粘贴方法签名。
如何解决这个问题?
谢谢,但所有这一切的重点正是无法为每种特定类型编写实现。无论如何,我已经提出了解决方案,查看我的答案。 –
@NikitaVolkov我认为你的实际用例必须比你上面发布的示例代码复杂得多,因为看起来你的解决方案就是这样,为每一个明确写出另一个东西。 – wheaties
是的,但该解决方案是关于更少的额外键入和更容易推理然后复制粘贴[这样的代码](http://stackoverflow.com/q/21289925/485115),这是一个签名示例I必须处理。 –