就像C#中的LINQ一样,为了理解Scala,在Kotlin中有类似的东西吗?如果不支持,是否有计划?
编辑:答案是理解支持在桌面上。
答案 0 :(得分:6)
在Kotlin 1.1的预览版中,有通用的async
/ await
语法,可以用于不同类型的monadic理解:
许多语言(从2012年的C#开始)支持异步 通过专用语言结构进行编程,例如async / await 关键字。在Kotlin中,我们概括了这个概念,以便图书馆可以 定义自己的这种构造版本,async不是 关键字,但只是一个函数。
此设计允许集成不同的异步API: 期货/承诺,回调传递等。它也足够通用 表达懒惰生成器(yield)并涵盖其他一些用例。
答案 1 :(得分:1)
没有特殊的关键字(do / for),因此无法像其他语言一样直接翻译为嵌套的flatMap(消除重复)。
但是,可以用协程实现单子理解。
摘自Arrow文档:https://arrow-kt.io/docs/patterns/monad_comprehensions/#comprehensions-over-coroutines
对协程的理解
此功能有多个名称:异步/等待,协程,执行 表示法,用于理解...每个版本都包含某些唯一 点,但都是基于相同的原理。在科特林,协程 (在该语言的版本1.1中引入)使编译器能够 将看似同步的代码重写为异步序列的过程。 Arrow使用编译器的此功能为您带来 对Monad类型类的所有实例都具有类似协程的表示法。
这意味着可以对Option,Try,List, 读取器,Observable,Flux或IO都相同。
有关协程,另请参阅“深入探讨JVM @ KotlinConf 2017上的协程”:https://www.slideshare.net/elizarov/deep-dive-into-coroutines-on-jvm-kotlinconf-2017?next_slideshow=1