1

我不能ListKOf<T>T -> Option<V>.

例如

listOf(1,2,3).k().flatMap { i ->
  if (i % 2 == 0) Some(i) else None
}

报告Required (Int) -> ListKOf<Int>. Found (Int) -> Option<Int>

要使其编译,我需要这样做:

listOf(1,2,3).k().flatMap { i ->
  val opt = if (i % 2 == 0) Some(i) else None
  opt.toList().k()
}

是否可以像前面的例子一样编写函数?

4

1 回答 1

1

@dyukha 上面的回答是最简洁的方式,但要具体回答您的问题:flatMap在单一单子类型中运行;也就是说,如果你想调用flatMapa ,你需要从提供给;的函数List中返回 a 如果要调用an ,则需要从提供给;的函数中返回 an 等等,等等。最接近的代码(不使用)是一种返回零或一个元素的方法,而不是或。ListflatMapflatMapOptionOptionflatMap.mapFilter()ListSome(x)None

于 2019-08-26T20:19:26.703 回答