Я написал этот коднайдено: scala.concurrent.Future [Опция [Int]] требуется: [?] Вариант
def m1(x: Int) = Future { if (x % 2 == 0) Some(x) else None }
def m2(x: Int) = Future { if (x % 2 != 0) Some(x) else None }
for {
x <- Some(3)
x1 <- m1(x)
x2 <- m2(x)
} yield x1 orElse x2
Моя цель состоит в том, что код должен сначала открыть будущее m1 и если имеет некоторое, а затем использовать это значение. в противном случае он должен открыть будущее m2 и использовать это значение.
Но он продолжает получать временную ошибку компиляции
<console>:26: error: type mismatch;
found : scala.concurrent.Future[Option[Int]]
required: Option[?]
x1 : Option[Int] <- m1(x)
^
Это не то же самое, что и код, который я написал. m1 и m2 принимают Int ... not Some (int) –
Правильно, вы можете использовать сопоставление образцов, чтобы получить значение только в том случае, если оно присутствует. Я отредактирую его прямо сейчас. –
Если вы идете этим путем, рассмотрите возможность использования 'Future.successful (Some (3))' вместо 'Future (Some (3))'. Последний вводит ненужную асинхронную границу и требует наличия «ExecutionContext», тогда как первый просто создает готовый успешный экземпляр «Future». – Haspemulator