Ich hatte genau dieselbe Frage wie Sie, und ich denke, ich sollte mit Ihnen teilen, wie ich angefangen habe, es anhand einiger wirklich einfacher Beispiele zu verstehen (beachten Sie, dass es nur die üblichen Anwendungsfälle abdeckt).
Es gibt zwei häufige Anwendungsfälle in Scala mit implicit
.
- Verwendung für eine Variable
- Verwendung für eine Funktion
Beispiele sind folgende
Verwendung für eine Variable . Wie Sie sehen können, wenn die implicit
Schlüsselwort in der letzten Parameterliste verwendet wird, wird die nächstgelegene Variable verwendet.
// Here I define a class and initiated an instance of this class
case class Person(val name: String)
val charles: Person = Person("Charles")
// Here I define a function
def greeting(words: String)(implicit person: Person) = person match {
case Person(name: String) if name != "" => s"$name, $words"
case _ => "$words"
}
greeting("Good morning") // Charles, Good moring
val charles: Person = Person("")
greeting("Good morning") // Good moring
Verwendung für eine Funktion . Wie Sie sehen können, wenn die implicit
für die Funktion verwendet wird, wird die nächstliegende Typumwandlungsmethode verwendet.
val num = 10 // num: Int (of course)
// Here I define a implicit function
implicit def intToString(num: Int) = s"$num -- I am a String now!"
val num = 10 // num: Int (of course). Nothing happens yet.. Compiler believes you want 10 to be an Int
// Util...
val num: String = 10 // Compiler trust you first, and it thinks you have `implicitly` told it that you had a way to covert the type from Int to String, which the function `intToString` can do!
// So num is now actually "10 -- I am a String now!"
// console will print this -> val num: String = 10 -- I am a String now!
Ich hoffe, dies kann helfen.