javascript – 用于链接和终止操作序列的functor或monad的名称和存在
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 用于链接和终止操作序列的functor或monad的名称和存在,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2564字,纯文字阅读大概需要4分钟。
内容图文
请原谅我,我会尽力描述我在寻找什么.我没有它的名字,所以它使它变得更加困难.
查看诸如Folktale和monet.js之类的库,我喜欢能够使用map进行链接操作而不使用null检查或if语句,例如使用也许,要么,任务.
我想知道是否存在类似的构造来解决以下问题:
>我有一个初始输入.
>我想构建一个对输入进行操作的函数链.
>每个函数可能会也可能不会返回结果.
>如果函数未返回结果,请调用链中的下一个函数.
>一旦函数返回结果,忽略链中的其余函数(类似于在Maybe.Nothing上映射函数)
>返回结果.
换句话说,我正在寻找类似于Maybe的东西,它拥有一个值并在Just上映射一个函数但忽略了映射在Nothing上的函数,你可以提取值.我正在寻找一些包含输入和初始null结果的东西.映射函数时,仅当结果为null时,它才会在输入上运行函数.如果函数返回一个值,则该值将成为结果,并且将忽略映射的任何其他函数.最后,您可以提取结果.
在命令式编程中,这可能如下所示:
var result1 = function1(input);
if (result1) {
return result1;
}
var result2 = function2(input);
if (result2) {
return result2;
}
// and so on.
相反,我想构建一些类似的东西
Something(input).map(function1).map(function2).result()
要么
compose(result, map(compose(function2, function1))(Something(input))
这样的结构是否存在?它有名字吗?即使这不存在而且我可以自己写,我也不知道该怎么称呼它.建议欢迎.
谢谢你的帮助!
UPDATE
在@Bergi的解决方案之后,我使用了Maybe.orElse.我写了一个名为ShortCircuit的小助手,我在下面发帖,以防有人发现这个有用.
import Maybe from "data.maybe";
const ShortCircuit = function(input, result) {
this.input = input;
this.result = result;
};
ShortCircuit.of = function(input, f) {
return new ShortCircuit(input, Maybe.fromNullable(f(input)));
};
ShortCircuit.prototype.orElseMaybe = function(f) {
return new ShortCircuit(this.input, this.result.orElse(() => Maybe.fromNullable(f(this.input))));
};
ShortCircuit.prototype.get = function() {
return this.result.get();
};
export default ShortCircuit;
以下是您如何使用它:
const result = ShortCircuit.of(input, f1).orElseMaybe(f2).orElseMaybe(f3).get();
欢迎提出改进建议.
解决方法:
您正在寻找的是Haskell中的Alternative type class.我还没有找到一个实现它的JS库,尽管有support for it in PureScript和discussion about specifying it in FantasyLand.
无论如何,我在Folktale中找到了一个完全符合你想要的功能:Maybe’s orElse.你可以这样使用它:
Something(input).orElse(function1).orElse(function2).get() // `get` throws when all failed
更好的是,orElse不仅适用于Maybe,还适用于Either,Validation和Task!
getOrElse method,即orElse in Monet.js,并不是真正有用,因为只有在失败的情况下它才会执行你的“处理程序”.您可以使用cata方法实现自己的Alternative.
1:谷歌搜索“JS替代”也没有真正的帮助,即使你知道这个名字:-)
哦,如果你使用的是promises,那么.catch(…) method总是有广泛的(ES6支持)支持.
内容总结
以上是互联网集市为您收集整理的javascript – 用于链接和终止操作序列的functor或monad的名称和存在全部内容,希望文章能够帮你解决javascript – 用于链接和终止操作序列的functor或monad的名称和存在所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。