Я понимаю, что выражение выражено в карте и flatMap. Но я нашел то, что я не могу объяснить, и вам нужна ваша помощь. Вот два примера: игрушечныенеобъяснимое значение для понимания в Scala
for {
None <- List(Option(1),None)
} yield 0
//res0: List[Int] = List(0, 0)
Q1: Почему некоторые (1) является карта на 0? Я ожидал, что список (0),
update1:
благодаря комментарию @marios, тыс один более странно.
for(None <- List(Some(1), None)) yield None
List(Some(1), None)
.
Update2:
некоторые говорят, что это переменная, но в среде IDE, это действительно ссылки на None
объекта.
Я использую IntelliJ для автоматического перевода выше для выражения для отображения-выражения:
List(Option(1), None).map { case None => 0 }
//scala.MatchError: Some(1)
Q2: Погрешности от этой карты-выражения, как ожидается, в то время как для самовыражения в первом вопросе не дает мне этой ошибки. Почему они получают разные вычисления?
for (None <- List (Some (1), None)) yield None. Это возвращает List (Some (1), None). Это так странно. – marios