Scala Неявное поведение значения со списком и «поиском» карты - PullRequest
2 голосов
/ 18 июня 2020

Я видел поведение List, упомянутое докладчиком в Scala видео лекции. Потом подумал, что попробую с картой. Кроме того, видя такое же разрешение типов через / через другой тип.

Мне любопытно, как работает это разрешение? Было ли это задумано со стороны команды разработчиков языка / компилятора Scala? Заинтересовала появившаяся причуда? Будет ли это работать в Dotty так же, но с другим синтаксисом? Есть ли что-то особенное в том, как определены List и Map, в котором говорится, что в основном я могу работать как функция и заменять один тип на другой?

Вот пример кода, чтобы проиллюстрировать, о чем я говорю:

  // I'm being verbose to stress the types
  implicit val theList: List[String] = List("zero", "one", "two", "three")
  implicit val theMap: Map[Double, String] = Map(1.1 -> "first", 2.1 -> "second")

  def doExample(v: String): Unit = {
    println(v)
  }

  doExample(1)
  // prints "one"
  doExample(1.1)
  // prints "first"

1 Ответ

3 голосов
/ 18 июня 2020

Полагаю, потому что

implicitly[List[String] <:< (Int => String)]             // ok
implicitly[Map[Double, String] <:< (Double => String)]   // ok

, поэтому верно следующее

val x: Int => String = List("zero", "one", "two", "three")
val y: Double => String = Map(1.1 -> "first", 2.1 -> "second")

x(1)
y(1.1)
// val res5: String = one
// val res6: String = first 
...