创建用于重复方法的monad

时间:2014-09-21 09:44:14

标签: scala monads

我试图了解Scala中的monad是什么。

比如说我在Java中有这样的方法:

public void doSomeThing()
{
   a.call();
}

public void doOtherThing()
{
   a2.call();
}

public void doSomeOtherThing()
{
   a3.call();
}

do开头的所有方法,只进行名为call的方法调用。如果我将其转换为Java中的常用方法,如:

public void doGeneric(SomeClass a)
{
   a.call();
}

并将此作为通用方法,call函数,然后doGeneric是monad?如果我错了,请纠正我。

请注意,我在Java中提供了示例,因为我刚刚开始使用Scala。

1 个答案:

答案 0 :(得分:1)

Monad与OptionList等“容器”的概念相关联 基本上,定义flatMap方法的容器是monad:

trait Monad[A] { //let's say a Monad container to be general. A well-known would be Option
  def flatMap[B](f: A => Monad[B]): Monad[B]
}

在您的情况下,您只需在一个对象上调用方法 你不是从另一个容器计算“容器”的价值,所以你没有monad 实际上,你只是利用了多态性。