Jay*_*Jay 3 scala scalaz applicative
鉴于这种简单的计算,我无法清楚地看到使用适用于monadic风格的风格之间的区别.是否有一些更好的例子(在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
Run Code Online (Sandbox Code Playgroud)
两个计算都以None结尾,因此最终结果是相同的.我可以看到的唯一区别是,在使用应用语法时,在for comprehension中没有temporaray访问这些变量.
此外,具有一个None值会停止整个计算.我认为应用意味着"不依赖于之前的计算结果"
应用程序构建器语法将评估每个术语,并且不能使用先前计算的结果.但是,即使第一个结果为None,仍将评估所有其他表达式.
然而,对于for comprehension,它将"快速失败"(在你的情况下它不会在None之后评估任何进一步的表达式),而且你可以访问先前计算的结果.
不要将这些东西视为简单的不同风格,他们用不同的行为调用不同的函数:即flatMap vs apply
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |