Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin arrow IO、IO.fx和IO之间的差异!效应_Kotlin_Functional Programming_Arrow Kt - Fatal编程技术网

Kotlin arrow IO、IO.fx和IO之间的差异!效应

Kotlin arrow IO、IO.fx和IO之间的差异!效应,kotlin,functional-programming,arrow-kt,Kotlin,Functional Programming,Arrow Kt,我想在科特林使用阿罗 箭头有三个功能 IO {} IO.fx {} IO.fx { !effect} 我想知道这两者之间的区别。我知道IO.fx和IO.fx{!effect}有助于我们使用副作用,但是这两者之间有什么区别,为什么我要使用一个而不是另一个呢 IO{}是一个接受挂起函数的构造函数,因此可以调用其中的任何挂起函数。这是IO.effect{}的快捷方式 它启用的另一个功能是从第一点开始的构造函数效果。因此,您实际上是在添加一层可能不必要的额外包装 fun inefficientNest

我想在科特林使用阿罗

箭头有三个功能

IO {}
IO.fx {}
IO.fx { !effect}

我想知道这两者之间的区别。我知道IO.fx和IO.fx{!effect}有助于我们使用副作用,但是这两者之间有什么区别,为什么我要使用一个而不是另一个呢

IO{}是一个接受挂起函数的构造函数,因此可以调用其中的任何挂起函数。这是IO.effect{}的快捷方式 它启用的另一个功能是从第一点开始的构造函数效果。因此,您实际上是在添加一层可能不必要的额外包装

fun inefficientNestIO(): IO<IO<Unit>> = IO.fx { effect { bla() } }

fun inefficientUnpackedIO(): IO<Unit> = IO.fx { !effect { bla() } }

虽然这很快就会改变,但在0.11.X版上:

IO{}是一个接受挂起函数的构造函数,因此可以调用其中的任何挂起函数。这是IO.effect{}的快捷方式 它启用的另一个功能是从第一点开始的构造函数效果。因此,您实际上是在添加一层可能不必要的额外包装

fun inefficientNestIO(): IO<IO<Unit>> = IO.fx { effect { bla() } }

fun inefficientUnpackedIO(): IO<Unit> = IO.fx { !effect { bla() } }
fun inefficientNestIO(): IO<IO<Unit>> = IO.fx { effect { bla() } }

fun inefficientUnpackedIO(): IO<Unit> = IO.fx { !effect { bla() } }
IO.fx {
  val id = getUserIdSuspend()
  val friends: List<User> = 
    !parMapN(
      userFriends(id),
      IO { userProfile(id) },
      ::toUsers
    )
  !friends.parTraverse(IO.applicative()) { user ->
   IO { broadcastStatus(user) } 
  }
}