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