Что подразумевается под типом, который обозначает неявное преобразование - PullRequest
5 голосов
/ 14 февраля 2020

Спецификация языка scala, раздел 7.2 , относится к неявной области действия: она объясняет, что неявная область действия - это модули, связанные каким-либо образом с частями типа T. Какие части T перечислены ниже. Одна из этих точек:

, если T обозначает неявное преобразование в тип с методом с типами аргументов T1,…,Tn и типом результата U, объединением частей T1,… , Tn и U;

Я не могу сделать из этого голову или хвост. Я не понимаю, как тип T может обозначать неявное преобразование.

Что подразумевается под этой частью спецификации неявной области видимости?

1 Ответ

4 голосов
/ 14 февраля 2020

Я полагаю, что это относится к следующей ситуации

case class Foo(v: Int)
object Foo {
  implicit def stringToFoo(s: String) = Foo(42)
}

def f[A](v: A)(implicit ev: A => Foo) = ev(v)

f("woohoo")

, где неявное преобразование type T = A => Foo, а Foo - это часть , связанная с параметром типа A, следовательно, object Foo становится частью неявной области, а stringToFoo неявное преобразование разрешается без необходимости импорта.

...