オーバーライドできるクラスに暗黙的に実装したいと思います。以下のとおり:私はコンパニオンオブジェクトまたは形質に一般的な暗黙のTool
実装を定義する場合オーバーライド可能な暗黙的な構造を構築する
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")
}
}
を、私は警告を受けますそのツールと暗黙的な総称はambiguous implicit values
です。
どのようにして、メソッドのスコープでオーバーライドして、さまざまなクラスで再利用できる汎用暗黙のvalを定義できますか?彼らは普通のものであるかのように
私はそのメソッドを何回か呼び出しているので、私は望んでいません – dstibbe
私が知る限り、同じクラスに定義されたimplicitsの優先メカニズムはありません。クラス階層の暗黙のために - 私は私の答えを更新しました。 – Maxim
しかし、あなたがあなたの例で示したように、私がTestの特性に暗黙的に定義しているのであれば、Testクラスのメソッド本体に暗黙的に定義することはできません。 – dstibbe