您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

函数编程(4) [源代码交易]

  • 时间:2022-08-19 00:43 编辑: 来源: 阅读:310
  • 扫一扫,手机访问
摘要:函数编程(4) [源代码交易]
函数(Functor)函数,如何将反应控制在可控范围内,异常解决,异步操作等。在函数式编程中。 什么是函子容器:包含值及其屈折的函子(这个屈折就是函数)。函子是一个特殊的容器,由一个普通的对象实现。map方法可以运行一个函数来求解值(拐点)。概念总是很模糊,但还是要看几遍。我们自己实现一个函子吧。 //Function Function class container {构造函数(值){this。_ value = value//函数中必须有值,并且_的开头约定为内部私有变量。我不想对外使用} map(fn){ return new container(fn(this。_ value))//传入的函数解完这个值后,需要返回另一个函子}//try let r = new container(5)//返回的函子可以继续调用。map(x = >;x + 1)。map(x = & gt;x * x)console . log(r)//= & gt;{_value: 36}关注地图。以上是最简单的函子。我们要求解的是value value,而不是functor,但是我们把函数传入map,他会求解。 但是每次使用前要求有新的容器不方便(更多是因为函数式编程,不希望看到new,哈哈哈哈之类的运算符),所以类Container { static of(value){//new无法避免,所以封装了一个of方法。secretly new return new container(value)} constructor(value){ this。_ value = value } map(fn){ return container . of(fn(this。_ value))// Of是静态方法,可以直接调用}}//trylet r = container.of (3)。map(x = >;x + 2)。map(x = & gt;x * x)console . log(r)//= & gt;{_value: 25}所以函子是一个有map方法的对象。函子里要维护一个值(也就是你传入的),这个值永远不会发布,就像这个值被包装在一个盒子里一样。如果您想要操作该值,只需将函数传递到map中。 摘要函数式编程的操作不直接对值进行操作,而是由functor来完成,functor是实现map契约的对象。我们可以把functor想象成一个盒子,里面封装了一个值。为了求解盒子中的值,我们需要向盒子的map方法传递一个函数(纯函数)。该函数用于求解该值。最后,map方法返回一个包含新值的盒子(仿函数)。基本就是这样。当然,事情没有这么简单。使用函子的目的是为了解决反应。//如果是空值(反应)容器。of(空)。map(x = >;X.toupper case ()//typeerror:无法读取null may函数的属性“toupper case”我们在编程的过程中可能会遇到很多错误,有必要相应地解决这些错误。马也函数的作用是解决外部零点情况(控制反应在允许范围内)。类马也{ static of(value){ return new may(value)}构造函数(value) {this。_ value = value}是nothing(){//这里增加了一个新的函数来判断是否可以为空,返回这个。_ value = = null ||这个。_ value = = undefined } map(fn){//在执行fn之前做一个判断,空的时候会返回一个null函数,返回this.isNothing Maybe。of (null):也许吧。的(fn(这个。_ value))}}相比之前,我们尽量让r = maybe。of(空)。map(x = >;x . toupper case())console . log(r)//= & gt;{_value: null}也没有错误。//他还是不完美。请参见maybe.of('你好,北京')。map(x = >;x.toUpperCase())。map(x = & gt;Null) //假设这里出了问题,导致Null被传下去。map(x = >;x . split(' ')//= & gt;{_value: null}虽然陷进去了,但是Meybe很难追查到问题。没关系。我们有两个函数中的任何一个,类似于if...其他...解决异常会使函数不纯,两个函数都可以用于异常解决。//这里需要两个函数leftrightclassleft { static cof(value){ return new left(value)} constructor(value){ this。_ value = value } map(fn){ return This//这个比较特殊,是直接返回这个对象,为什么这里会这样?} }//这个右边和前面的容器没什么区别。class right { static of(value){ return new right(value)}构造函数(value) {this。_ value = value } map(fn){ return right . of(fn(this。_ value))} }//try//使用JSON.parse的异常使错误函数parse JSON(str){ try { return right . of(JSON . parse(str))} catch(e){ return left . of({ error:e . message })//转到错误,将错误消息返回到左边,因此,left的map直接返回this就够了} } let r = parse JSON(' { name:zs } ')//name不加双引号, 所以会给出一个错误console . log(r)/= > { _ value:{ error:“JSON中位置2出现意外的token n”} }没有代码错误,异常信息通过仿函数= = = = = = =分隔符= = = =后跟IO仿函数,Monad仿函数等显示。 这个东西我真的不懂,能力有限。我知道你看到这里的函子会很疑惑。我也是。其实原因是不知道哪里适用。不用担心,我们平时用的机会很少,包括面向对象编程。我们用过吗?我只在打包几个基础库的时候用过,所以无所谓。慢慢来(安慰自己)+++除了最后几个函子,函数式编程都完成了!附录函数式编程是指函数式编程的介绍。


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部