有unit = Try,Try不是单子,因为左单位法失败了.
Try(expr) flatMap f != f(expr)
Run Code Online (Sandbox Code Playgroud)
但问题是什么:Try如果是单身人士unit = Success吗?
在这种情况下:
Success(expr) flatMap f == f(expr)
Run Code Online (Sandbox Code Playgroud)
所以这是一个单子.
我的理解是否正确?
在coursera论坛中从Alexey的帮助中得到答案:
当unit = Success,对于左单位定律:
Success(throw new Exception) flatMap f == f(throw new Exception) // holds
Success(s) flatMap (x => throw new Exception) == Failure(new Exception) // does not hold
Run Code Online (Sandbox Code Playgroud)
它实际上又输了,除非你当然重新定义 flatMap 来重新抛出异常,从而失去了主要功能 Try
| 归档时间: |
|
| 查看次数: |
1215 次 |
| 最近记录: |