Я видел поведение 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 ответ
Я думаю, потому что
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
Похожие вопросы
Новые вопросы
scala
Scala - это язык программирования общего назначения, в основном предназначенный для виртуальной машины Java. Разработанный для краткого, элегантного и безопасного для типов представления общих шаблонов программирования, он сочетает в себе как императивный, так и функциональный стили программирования. Его ключевые особенности: продвинутая система статического типа с выводом типа; типы функций; сопоставления с образцом ; неявные параметры и преобразования; перегрузка оператора; полная совместимость с Java; совпадение