我无法使用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()
}

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

最佳答案

上面@dyukha的答案是最简洁的方法,但是要专门回答您的问题:flatMap在单个monadic类型中运行;也就是说,如果要在flatMap上调用List,则需要从提供给List的函数中返回flatMap;如果要在flatMap上调用Option,则需要从提供给Option的函数中返回flatMap;最接近的代码(不使用.mapFilter())是一种返回零或一个元素的List而不是Some(x)None的方法。

关于kotlin - FlatMapping ListK和Option,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56747148/

10-12 04:05