Карта Scala явного типа - PullRequest
       17

Карта Scala явного типа

0 голосов
/ 17 сентября 2018

Я новичок в Scala и программировании в целом .. У меня проблемы с функцией карты Scala ..

Простая сигнатура функции карты: def map [B] (f: (A) ⇒ B): список [B]

Итак, я думаю, что B карты [B] является общим, и я могу явно указать тип результата?

Если я попытаюсь запустить код:

 val donuts1: Seq[Int] = Seq(1,2,3)
 val donuts2: List[Int] = {
    donuts1.map[Int](_ => 1)
  }

я получил сообщение об ошибке «Выражение типа int не соответствует expexted типу B»

Я не понимаю проблему здесь .. Может ли кто-нибудь объяснить проблему?

Спасибо!

1 Ответ

0 голосов
/ 17 сентября 2018

Цитата map(), указанная в вашем вопросе, является упрощенной / сокращенной версией полной подписи.

final def map[B, That](f: (A) ⇒ B)(implicit bf: CanBuildFrom[List[A], B, That]): That

Так что, если вы хотите указать параметры типа (которые почти никогда не нужны), вы должны указать оба.

val donuts1: List[Int] = List(1,2,3)
val donuts2: List[Int] = donuts1.map[Int,List[Int]](_ => 1)
//donuts2: List[Int] = List(1, 1, 1)

и я могу явно указать тип результата?

Не совсем. Параметр типа должен соответствовать тому, что возвращает f функция / лямбда. Если вы укажете параметр типа, то вы (обычно) просто просите компилятор подтвердить, что тип результата на самом деле соответствует вашему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...