可能是 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。
在 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。