sto cercando di definire una classe con alcuni metodi di prendere un parametro implicito:Come fornire valore di default per i parametri impliciti a livello di classe
object Greetings {
def say(name: String)(implicit greetings: String): String = greetings + " " +name
}
Io uso questa classe da un'altra classe
implicit val greetings = "hello" //> greetings : java.lang.String = hello
Greetings.say("loic") //> res0: String = hello loic
Greetings.say("loic")("hi") //> res1: String = hi loic
Il mio problema è che funziona solo se definisco il valore implicito al di fuori dell'oggetto Greetings. Mi piacerebbe essere in grado di fornire metodi con parametri impliciti, con un valore predefinito all'interno della mia classe, per rendere più facile l'uso della mia API (come l'API di raccolta Scala).
Così mi piacerebbe fare questo, ma non sta funzionando (valore implicito non trovato):
object Greetings {
implicit val greetings = "hello"
def say(name: String)(implicit greetings: String): String = greetings + " " +name
}
e poi
Greetings.say("loic")
Greetings.say("loic")("hi")
so di poter definire un valore predefinito con (implicit greetings: String = "hello")
ma Mi piacerebbe farlo a livello di classe, per evitare di ripetere se ci sono molti metodi.
Immagino di perdere qualcosa perché ho visto che CanBuildFrom
è definito all'interno della classe List
, ad esempio.
Non è strano, in quanto implicita sarà inserito secondo solo ai parametri normali. Normalmente la tua classe sarebbe simile a 'class Greetings() (implicito val ...)' – thatsIch