如果单位=成功,是否尝试monad?

Fre*_*ind 7 monads scala

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)

所以这是一个单子.

我的理解是否正确?

Fre*_*ind 5

在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

  • 我认为这个案子完全没有用。使用 Try 并不是为了抛出异常。能写出这样的代码只是Scala的一个弱点。如果您仍然不相信,请将这一行放入一些 f 中: ```Thread.currentThread().getStackTrace.find( _.getMethodName.contains("flatMap") ) .foreach{_=> throw new RuntimeException("no monad no cry")}``` 并且你实际上可以**杀死任何用 scala 编写的 Monad**。 (2认同)