Ich möchte ein generisches implizit für eine Klasse implementieren, die überschrieben werden kann. Wie folgt:Konstruieren eines Overridable implizit
tooling.scala
package tooling
case class Tool(msg: String)
class Toolkit{
def usingTool(source:String)(implicit tool:Tool){
println(s"[$source] using tool: ${tool.msg}")
}
}
user.scala
package user
class User{
val toolkit = new Toolkit()
def usingGenericTool(){
toolkit.usingTool("from generic usage")
}
def usingSpecificTool(){
implicit lazy val tool = Tool("shovel")
toolkit.usingTool("from generic usage")
}
}
Wenn ich eine generische implizite Tool
Implementierung in einem Begleitobjekt oder Merkmal definieren, erhalte ich die Warnung dass Werkzeug und die generische implizit sind ambiguous implicit values
.
Wie kann ich ein generisches implizites val definieren, das im Rahmen einer Methode noch überschrieben und in verschiedenen Klassen wiederverwendet werden kann?
Ich will nicht, da ich diese Methode mehrmals aufrufen werde – dstibbe
Soweit ich weiß, gibt es keinen Prioritätsmechanismus für implicits, die in derselben Klasse definiert sind. Für die Klassenhierarchie - ich habe meine Antwort aktualisiert. – Maxim
Aber wenn ich das implizit im Test-Merkmal definiere, wie Sie in Ihrem Beispiel gezeigt haben, kann ich kein implizites Element im Methodenkörper der Test-Klasse definieren. – dstibbe