可能是 JavaScript 中的 monad

Maybe monad in JavaScript

在 npm 上 monads.maybe 的示例中,我们有:

function find(collection, predicate) {
  for (var i = 0; i < collection.length; ++i) {
    var item = collection[i]
    if (predicate(item))  return Maybe.Just(item)
  }
  return Maybe.Nothing()
}

谁能解释一下 Maybe.Just(item);Maybe.Nothing() 实际上在做什么?

换句话说; monad 本质上是用作 return 值的对象,这些值实现特定的接口,可以定义一系列函数调用吗?

Maybe 用于表示可能会失败的操作。

在这个函数的例子中,你 return Just(the element) 如果一个元素满足谓词,否则你 return Nothing 表明它有 "failed"(在这种情况下,none 个元素满足谓词)。

最好只 return 空值,因为 return 类型明确表明它可能会失败,并且可以对答案进行模式匹配。

Monad 是抽象容器,具有 API 以对其中包含的数据进行操作。在 Option monad I think of it as a giftbox 的实例中,要么有礼物,要么是空的。将数据包装在 Maybe.Just() 中表示此容器确实包含数据,同时它会将返回值维护为 Maybe。然后 find() 方法的调用者可以这样做:

var userPredicate = function(user) { return user.name === 'billy bob'; };
var users = collections.getUsersCollection();

var maybeData = find(users, userPredicate);
if(maybeData.isJust()) {
    // there was data...do something with it
} else {
    // no data...do something else
}

另一方面,Maybe.Nothing()表示没有数据(上例中的else部分)。理想情况下,您可以像这样将数据包装在其中:var maybeData = Maybe(data) 然后对其进行操作,传递它等。这是向接收此对象的任何人发出的信号,他们需要有意识地处理丢失数据的情况。

披露:我正在开发一个名为 Giftbox 的类似库,它具有更丰富的 API。查看那里的自述文件以获得更多解释,以帮助您了解 Option monad 是什么以及如何有效地使用它。

Here's an article 描述可能对您有用的 Monad、Applicatives 和 Functors。