资讯专栏INFORMATION COLUMN

关于add方法的实现——undersore,lodash && ramda

happen / 3188人阅读

摘要:方法简答粗暴,我喜欢高阶函数应用,典型纯函数式华丽的柯丽化应用,往死里面套,然后使用起来,缺没那么歇菜歇菜未来如果非要实现咋办

Add 方法 undersore
var add =function(a,b){
    return a+b;
}

简答粗暴,我喜欢

lodash
function createMathOperation(fn){
    return function(...arg){
           return fn(arg)
   }
}

var add=createMathOperation((a,b)=>a+b)

高阶函数应用,典型纯函数式

ramda
funtion _cuurry1(fn){
    return function f1(a) {
    if (arguments.length === 0 || _isPlaceholder(a)) {
      return f1;
    } else {
      return fn.apply(this, arguments);
    }
  }
}
function _curry2(fn) {
  return function f2(a, b) {
    switch (arguments.length) {
      case 0:
        return f2;
      case 1:
        return _isPlaceholder(a) ? f2
             : _curry1(function(_b) { return fn(a, _b); });
      default:
        return _isPlaceholder(a) && _isPlaceholder(b) ? f2
             : _isPlaceholder(a) ? _curry1(function(_a) { return fn(_a, b); })
             : _isPlaceholder(b) ? _curry1(function(_b) { return fn(a, _b); })
             : fn(a, b);
    }
  };
};
var add=_curry2((a,b)=>a+b)

华丽的柯丽化应用,往死里面套,然后使用起来,缺没那么Hai

 add(1,2) ==> 3
 add(1)(2) ==> 3
 add(1,2)(3) ==> 歇菜
 add(1)(2)(3) ==> 歇菜
未来?

如果非要实现 add(1,2)(3)(4,5) 咋办?

function curray(fn){
    return function(){
        var args=[].slice.call(arguments);
        var func=function(){
            [].push.apply(args,[].slice.call(arguments))
            return func;
        }
        func.toString=function(){
            return args.reduce(fn)
        }
        return func
    }
}
var add=curray(function(a,b){return a+b;})
var a=add(1,2,3)(4)(5);

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/83635.html

相关文章

  • 翻译连载 | 附录 C:函数式编程函数库-《JavaScript轻量级函数式编程》 |《你不知道J

    摘要:为了尽可能提升互通性,已经成为函数式编程库遵循的实际标准。与轻量级函数式编程的概念相反,它以火力全开的姿态进军的函数式编程世界。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTML 最坚实的梁柱;分享,是 CSS 里最闪耀的一瞥;总结,...

    Miracle 评论0 收藏0
  • 快速 TypeScript 化 lodash throttle & debounce

    摘要:背景需要包写起来爽,然而如果遇到没有现成的化的工具函数,就需要自己想办法弄出一份类型声明文件了。最为重要的是,这种迁移方面我们可以随意自定义化中所需要的工具函数,迁移粒度都可以由自己控制。 1、背景 1.1、需要 TS 包 TypeScript 写起来爽,然而如果遇到没有现成的 TS 化的工具函数,就需要自己想办法弄出一份类型声明文件了。 前两天要写的小工具库(Typescript 语...

    lewinlee 评论0 收藏0
  • 如何开发JS-SDK

    一、前言最近在开发一款一键登录的号码认证js-sdk,所以就做了一些调研,记录下开发过程。前端SDK是什么?前端SDK是为了帮助前端实现特定需求,而向开发者暴露的一些JS-API的集合,规范的SDK包括若干API实现、说明文档等前端SDK其实很常见了,比如:UI组件库:通过封装一系列组件,通过配置帮助开发者调用AntdElementUIJS类库:通过实现一类常用的方法,便于开发处理数据,也不用再考...

    社区管理员 评论0 收藏0
  • Lodash 源码分析(三)Array

    摘要:前言这是源码分析系列文章的第三篇,前面两篇文章源码分析一源码分析二分别分析了中的一些重要函数,也给出了简化的实现,为理解其内部机理和执行方式提供了便利。官方也对其进行了说明。 前言 这是Lodash源码分析系列文章的第三篇,前面两篇文章(Lodash 源码分析(一)Function Methods、Lodash 源码分析(二)Function Methods)分别分析了Lodash F...

    ZoomQuiet 评论0 收藏0
  • Python单元测试两种方法解答

      小编这这篇文章的主要目的,主要是给大家进行一个详解,解释一下关于Python中,单元格测试的一些具体方法,那么,测试的方法都有什么呢?下面小编就给大家详细的做出一个解答。  一、前言  python的两个单元测试包分别是doctest和unittest,这两个包的使用起来各有长处,适用于不同的场景  doctest:直接写在方法体中,利用了python动态语言的特性,书写方式简单明了,前提是项...

    89542767 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<