理解产生了类型不匹配的编译器错误

问题描述 投票:0回答:1

我想从Iterable[Try[Int]]列表中提取所有有效值(Iterable[Int]

val test = List(
    Try(8), 
    Try(throw new RuntimeException("foo")), 
    Try(42), 
    Try(throw new RuntimeException("bar"))
)

以下是从test打印所有有效值的方法:

for {
    n <- test
    p <- n
} println(p)

// Output
// 8
// 42

但是,当我尝试将有效值保存到列表中时,出现错误:

val nums: Seq[Int] = for {
    n <- list
    p <- n    // Type mismatch. Required: IterableOnce[Int], found Try[Int]
} yield(p)
println(nums)

如何解决该错误以及为什么引发该错误?

scala compiler-errors yield type-mismatch for-comprehension
1个回答
1
投票

尝试收集

test.collect { case Success(value) => value }
// res0: List[Int] = List(8, 42)
© www.soinside.com 2019 - 2024. All rights reserved.