Как может implicits с несколькими исходными данными использоваться в Scala?

Например, как может я писать выражение, где следующее неявно применяется:

implicit def intsToString(x: Int, y: Int) = "test"

val s: String = ... //?

Спасибо

11
задан Dimitris Andreou 10 March 2010 в 12:15
поделиться

1 ответ

Неявные функции одного аргумента используются для автоматического преобразования значений в ожидаемый тип. Они известны как неявные представления. С двумя аргументами это не работает или не имеет смысла.

Вы можете применить неявное представление к TupleN :

implicit def intsToString( xy: (Int, Int)) = "test"
val s: String = (1, 2)

Вы также можете пометить окончательный список параметров любой функции как неявный.

def intsToString(implicit x: Int, y: Int) = "test"
implicit val i = 0
val s: String = intsToString

Или, комбинируя эти два использования неявного :

implicit def intsToString(implicit x: Int, y: Int) = "test"
implicit val i = 0
val s: String = implicitly[String]

Однако в данном случае это бесполезно.

ОБНОВЛЕНИЕ

Чтобы уточнить комментарий Мартина, это возможно.

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]
18
ответ дан 3 December 2019 в 05:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: