Ich versuche, eine Klasse mit einigen Methoden nehmen einen impliziten Parameter zur Verfügung zu stellen, um zu definieren:Wie Standardwert für implizite Parameter in den Klassen
object Greetings {
def say(name: String)(implicit greetings: String): String = greetings + " " +name
}
ich diese Klasse von einer anderen Klasse verwende
implicit val greetings = "hello" //> greetings : java.lang.String = hello
Greetings.say("loic") //> res0: String = hello loic
Greetings.say("loic")("hi") //> res1: String = hi loic
Mein Problem ist, dass es nur funktioniert, wenn ich das implizite Wert außerhalb meines Greetings-Objekts definiere. Ich möchte in der Lage sein, Methoden mit impliziten Parametern mit einem Standardwert innerhalb meiner Klasse bereitzustellen, um die Verwendung meiner API (wie Scala Collection API) zu erleichtern.
So würde Ich mag, dies zu tun, aber es funktioniert nicht (impliziter Wert nicht gefunden):
object Greetings {
implicit val greetings = "hello"
def say(name: String)(implicit greetings: String): String = greetings + " " +name
}
und dann
Greetings.say("loic")
Greetings.say("loic")("hi")
Ich weiß, ich kann einen Standardwert mit (implicit greetings: String = "hello")
definieren, aber Ich würde es gerne auf Klassenebene machen, um zu vermeiden, dass es viele Methoden gibt.
Ich denke, ich vermisse etwas, weil ich sah, dass CanBuildFrom
zum Beispiel innerhalb der List
Klasse definiert ist.
es nicht seltsam ist, da implizit nur Sekunden, um die normalen Parameter eingefügt werden. Normalerweise würde Ihre Klasse wie 'class Greetings() aussehen (implizite val ...)' – thatsIch