próbuję zdefiniować klasę niektóre metody podejmowania niejawny parametr:Jak zapewnić domyślną wartość parametrów ukrytych na poziomie klasy
object Greetings {
def say(name: String)(implicit greetings: String): String = greetings + " " +name
}
Używam tej klasy z innej klasy
implicit val greetings = "hello" //> greetings : java.lang.String = hello
Greetings.say("loic") //> res0: String = hello loic
Greetings.say("loic")("hi") //> res1: String = hi loic
Mój problem polega na tym, że działa tylko wtedy, gdy definiuję niejawną wartość val poza moim obiektem Greetings. Chciałbym móc dostarczyć metody z niejawnymi parametrami, z wartością domyślną w mojej klasie, aby ułatwić korzystanie z mojego API (np. API Scala collection).
Tak chciałbym to zrobić, ale to nie działa (wartość niejawna nie znaleziono):
object Greetings {
implicit val greetings = "hello"
def say(name: String)(implicit greetings: String): String = greetings + " " +name
}
a następnie
Greetings.say("loic")
Greetings.say("loic")("hi")
wiem, że mogę określić wartość domyślną z (implicit greetings: String = "hello")
ale Chciałbym to zrobić na poziomie klasy, aby uniknąć powtarzania, jeśli istnieje wiele metod.
Chyba brakuje mi czegoś, ponieważ zobaczyłem, że klasa CanBuildFrom
jest zdefiniowana na przykład w klasie List
.
To nie jest dziwne, ponieważ ukryte zostanie wstawiony tylko sekundy do normalnych parametrów. Zwykle twoja klasa wyglądałaby jak "klasa Greetings() (domyślna wartość ...)" – thatsIch