niejawne funkcje jednym argumentem są wykorzystywane do automatycznej konwersji wartości oczekiwanej typu. Są one znane jako niejawne wyświetlenia. Z dwoma argumentami to nie działa lub ma sens.
Można zastosować niejawny widoku do TupleN
:
implicit def intsToString(xy: (Int, Int)) = "test"
val s: String = (1, 2)
Można również zaznaczyć ostateczną listę parametrów dla każdej funkcji jako niejawna.
def intsToString(implicit x: Int, y: Int) = "test"
implicit val i = 0
val s: String = intsToString
Albo, łącząc te dwa zwyczaje implicit
:
implicit def intsToString(implicit x: Int, y: Int) = "test"
implicit val i = 0
val s: String = implicitly[String]
Jednak nie jest to bardzo przydatne w tym przypadku.
UPDATE
Aby rozwinąć komentarzem Marcina, jest to możliwe.
implicit def foo(a: Int, b: Int) = 0
// ETA expansion results in:
// implicit val fooFunction: (Int, Int) => Int = (a, b) => foo(a, b)
implicitly[(Int, Int) => Int]
Czy sugerować (:-)), że mój oryginalny DEF (co nie mieć niejawną listę parametrów) nie można wywoływać niejawnie? (Oznacza to, że słowo "niejawne" w moim przykładzie jest całkowicie pozbawione sensu - jeśli żaden kod nie zauważy różnicy). Czy tak jest naprawdę? Czy jest to zamierzone jako częściowa odpowiedź, w sensie "hej, przynajmniej te sprawy działają"? –
Prawidłowo. Wiem, że w obecnym języku wiem, w jaki sposób można się na to powoływać. Ostrzeżenie o kompilacji może być pomocne w zakomunikowaniu tego faktu. – retronym
Oryginalna funkcja nie może być używana jako niejawna konwersja, ponieważ pobiera dwa parametry. Jednak nadal może być używany jako niejawny argument dla innej metody. Tak więc modyfikator 'niejawny 'ma tutaj przydatne znaczenie. –