Ich erwarte den folgenden Code zum Drucken 1
und 2
. Aber ich bekomme default
und default
. Wenn ich den impliziten Wert mithilfe des auskommentierten Codes explizit weiterleite (?), Sehe ich die gewünschte Ausgabe. Kann mir jemand erklären, wie das funktioniert? Ist das, was ich versuche, unmöglich? Ich bin total neu in Scala. Was soll ich lesen, um das zu verstehen?Wie indirekt übergeben ein implizites Argument
case class Context(id: Option[String])
object Context {
implicit val context = Context(Some("default"))
}
class ToolBuilder (id: String) {
implicit val context = Context(Some(id))
def extract() = ToolCreatorA.create()
}
case class ToolCreatorA(id: String)
object ToolCreatorA {
def create() = ToolCreator.create()
//def create()(implicit context: Context) = ToolCreator.create()
object ToolCreator {
def create()(implicit context: Context) = context.id.getOrElse("null")
}
}
object Main {
def main(args: Array[String]): Unit = {
println(new ToolBuilder("1").extract())
println(new ToolBuilder("2").extract())
}
}
so bedeutet dies, dass in meinem Fall mit einem impliziten Parameter sinnlos ist – perreal
es hängt davon ab, ich habe nicht verstanden, Ihre Absicht der Verwendung von implicits. – Tawkir
meine Absicht ist es, die Implementierung von ToolCreatorA für den impliziten Parameter, den ich einführe, transparent zu machen. Der eigentliche Code hat einige Ebenen mehr, bis ich den ToolCreator erreiche – perreal