首页 > 其他分享 >自动柯里化函数的实现

自动柯里化函数的实现

时间:2023-08-20 21:44:09浏览次数:29  
标签:return 函数 args 参数 柯里化 自动 fn

JavaScript柯里化 柯里化也是属于函数式编程里面一个非常重要的概念。 我们先来看一下维基百科的解释:

口在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化;

口是把接收多个参数的函数,变成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数,而且返回结果的新函数的技术;

口柯里化声称“如果你固定某些参数,你将得到接受余下参数的一个函数";

维基百科的结束非常的抽象,我们这里做一个总结:

口只传递给函数一部分参数来调用它,让它返回一个函数去处理剩余的参数;

口这个过程就称之为柯里化;

自动柯里化函数的实现

 1 function add1(x,y,z){
 2     return x+y+z
 3 }
 4 
 5 //柯里化函数的实现
 6 function hyCurrying(fn){
 7     function curried(...args){
 8         // 判断当前已经接收的参数的个数,可以参数本身需要接受的参数是否已经一致了
 9         // 1.当已经传入的参数 大于等于 需要的参数时,就执行函数
10         if(args.length>=fn.length){
11             // fn(...args)
12             // fn.call(this,...args)
13             return fn.apply(this,args)
14         }else{
15             //没有达到个数时,需要返回一个新的函数,继续来接收的参数
16             function curried2(...args2){
17                 //接收到参数后,需要递归调用curried来检查函数的个数是否达到
18                 return curried.apply(this,args.concat(args2))
19             }
20             return curried2
21         }
22     }
23     return curried
24 }
25 
26 var curryAdd=hyCurrying(add1)
27 console.log(curryAdd(10,20,30))
28 // curryAdd(10,20)(30)
29 // curryAdd(10)(20)(30)

 

标签:return,函数,args,参数,柯里化,自动,fn
From: https://www.cnblogs.com/KooTeam/p/17644643.html

相关文章

  • 高效利用Python装饰器优化函数功能与性能
    在后端开发领域,Python作为一门广泛应用的编程语言,为开发人员提供了丰富的工具和库。本文将深入探讨Python装饰器的原理、用法以及如何利用装饰器优化函数的功能和性能。通过结合实际示例,为读者提供关于装饰器的深奥知识和实用代码。1.装饰器概述与原理装饰器是Python中一种强大的......
  • Oracle 分区表自动管理(待整理)
    原文-https://github.com/aws-samples/automate-table-partitioning-in-oracle-standard-edition/tree/main/partitions/scripts需要调整的地方有:1.droptable未释放垃圾空间2.未提及到收缩HWM释放空间partitions/scripts/partition_mgmt_tables.sql---partitions/sc......
  • 人工智能在金融领域的崭露头角-自动化决策与风险管理的突破
    随着科技的不断发展和人工智能技术的日益成熟,人工智能在各个领域都展现出了巨大的潜力。其中,金融领域作为一个信息密集度极高、且需要实时决策的行业,对于人工智能的应用尤为重要。本文将探讨人工智能在金融领域中的崭露头角,并着重分析其在自动化决策与风险管理方面的突破。自动化......
  • C++ 虚继承,虚函数与纯虚函数整理
    1.虚继承虚继承是用于解决多继承中“菱形继承”问题的一种技术。在多继承中,如果两个基类都继承了同一个基类,派生类会包含两份该基类的数据成员和函数成员,从而产生冗余和二义性。虚继承的作用就是消除这种冗余。虚继承的定义方式是在继承关系中添加关键字“virtual”,如下所示:cl......
  • C++ 函数指针与Lambda匿名函数
    函数指针c语言学过了,这里简单记一下,下面举例一个用法就行:#include<iostream>#include<vector>template<classT>voidprint(Tv){ std::cout<<v<<std::endl;}template<classT1,classFunc>voidForEach(std::vector<T1>&v,Func......
  • shell脚本中的函数与数组
    一.函数编写脚本时,有些脚本可以反复使用,可以调用函数来解决语句块定义成函数约等于别名函数使用方法:定义函数再引用函数建立函数,基本格式1.function函数名{ 命令序列}2.函数名(){命令序列}3.functionfunc_name(){...函数体...}1.注意事项直接写......
  • C++ 构造函数与析构函数
    构造函数和析构函数构造函数构造函数会在实例化对象的时候执行,可以在实例化时传入参数。构造函数没有返回值。不需要声明返回值。构造函数的函数名与类名保持一致。//classname:PlayerPlayer(intxa=0,intya=0){//构造函数,传入初始坐标进行初始化......
  • linux shell 函数与脚本调试
    **函数:**1.**函数定义**:使用`function`关键字或者直接写函数名来定义函数。functionmy_function(){echo"函数内容"}my_function(){echo"函数内容"}2.**函数调用**:直接使用函数名来调用函数。my_function3.**函数参数**:可以在函数中使用参数来传递值。......
  • 自动上传博客图片
    背景​ 我们写博客难免需要大量图片,如果把图片一张张上传到博客相册再引用图片链接,就很麻烦。所以需要一种手段,让我们可以在本地写完博客内容后,自动把博客引用的图片传到网上,并在网上发布。​ 这时候就需要dotnet-cnblog :博客园文章快捷发布工具环境准备开启.net功能​ 我使......
  • [cuda]RMSNorm核函数解析
    计算原理\(RMSNorm=x*(sqrt(1/n*(x_i)^2+eps))*g\)torch实现classRMSNorm(torch.nn.Module):def__init__(self,dim:int,eps:float=1e-6):super().__init__()self.eps=epsself.weight=nn.Parameter(torch.ones(dim))......