每个方法都返回`this`是monad吗?

Kra*_*bbe 5 oop monads functional-programming

返回thismonad 的类中的每个方法都是?

Gia*_*ian 7

我要说一个非常谨慎的"可能".这很大程度上取决于您的定义.

值得注意的是,我从类别理论构造中获取monad的定义,而不是函数式编程构造.

如果你想到一个将一个实例映射到另一个实例A的类的方法(即它返回),那么这将是一个类似于自身实例化的类的仿函数.因此,它至少是一个endofunctor.看起来这种结构遵循我们期望的基本身份和相关性属性,但需要进一步检查才能确定.CCCthisC.A()C

无论如何,我不会把我的生命放在它上面,我不确定这是一个非常有用的思考这种结构的方法,但它至少在第一次检查时似乎是一个合理的假设.

  • 像Haskell这样的monad的定义遵循类别理论中的定义,所以谈论一个基本上是在谈论另一个(关于一些极端情况).我选择精确地使用分类定义,因为没有明确的monad语法的OOP语言永远不适合具有显式语法的语言提供的定义.如果你的方法正在修改全局状态,那么是的,定义可能会有点冒险,但是少数真正的OOP语言实际上允许这种情况(而不是使用固定对象的命令式语言). (2认同)
  • 然后,执行IO的对象或具有可变静态成员的对象呢?当我说"全球状态"时,我就想到了这一点. (2认同)

小智 4

我对单子的理解有限。我无法判断这是否符合 monad 的正式定义(我不这么认为,但我不确定),但return this;单独不允许任何 monad 允许的很酷的事情(流体接口很好) ,但不是 monad,恕我直言,也没有像选项类型 monad 这样简单的 monad 那样有用)。

维基百科的这段代码似乎在说“不”:

形式上,一个 monad 是通过定义两个操作(绑定和返回)和一个类型构造函数 M 来构造的 [...我们在这里不需要进一步的限制]

编辑:此外,单子是一种类型而不是操作(例如方法) - 问题应该阅读“如果一个类的所有方法都返回,那么它是单子吗this?”</nitpick >