gpt4 book ai didi

scala - scala中应用计算和单子(monad)计算之间的区别

转载 作者:行者123 更新时间:2023-12-01 10:37:14 25 4
gpt4 key购买 nike

鉴于这个简单的计算,我无法清楚地看到使用应用风格与单子(monad)风格之间的区别。是否有一些更好的例子(在 scala 中)何时使用一个而不是另一个。

    println( (3.some |@| none[Int] |@| 4.some )( (a:Int,b:Int,c:Int) => {  a + b + c } )  ) // prints None

println( for(
a <- Some(3);
b <- none[Int];
c <- Some(4)
) yield( a + b + c ) ) // prints None

两次计算都以 None 结束,因此最终结果相同。我能看到的唯一区别是,在使用应用语法时,无法临时访问 for comprehension 中的那些变量。

此外,有一个 None 值会停止整个计算。我认为应用意味着“不依赖于之前的计算结果”

最佳答案

应用程序构建器语法将评估每个术语并且不能使用先前计算的结果。但是,即使第一个结果为 None,所有其他表达式仍将被计算。

然而,对于 for 理解,它将“快速失败”(在您的情况下,它不会在 None 之后评估任何进一步的表达式),而且您可以访问先前计算的结果。

不要将这些东西简单地视为不同的样式,它们调用具有不同行为的不同函数:即 flatMap 与 apply

关于scala - scala中应用计算和单子(monad)计算之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33126401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com