CN113703879A - 对象重载方法、装置、设备及存储介质 - Google Patents
对象重载方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN113703879A CN113703879A CN202111010981.4A CN202111010981A CN113703879A CN 113703879 A CN113703879 A CN 113703879A CN 202111010981 A CN202111010981 A CN 202111010981A CN 113703879 A CN113703879 A CN 113703879A
- Authority
- CN
- China
- Prior art keywords
- function
- reloading
- reloaded
- parameter
- function name
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及人工智能技术以及基架运维领域,公开了一种对象重载方法、装置、设备及存储介质。该方法包括:获取待重载对象,并解析待重载对象,得到待重载对象对应的第一函数名称和第一参数类型;对相同函数名称的待重载对象对应的第一函数名称和第一参数类型进行包装,得到重载函数,并通过重载函数分别对对应的待重载对象进行重载;在执行重载后的对象时,获取对象调用请求,并根据对象调用请求,通过重载函数,对对象调用请求所指定的目标对象进行定位;调用定位到的目标对象并执行。本发明实现了JS面向对象的重载,降低了后期拓展的难度和逻辑判别复杂程度。
Description
技术领域
本发明涉及人工智能以及基架运维领域,尤其涉及一种对象重载方法、装置、设备及存储介质。
背景技术
JS(JavasSript,一种编程语言)是一种具有函数优先的轻量级、解释型和即时编译型的编程语言。它不仅作为开发Web页面的脚本语言,还被用到非浏览器环境中,并且支持OOP(Object Oriented Programming,面向对象的编程)、命令式和声明式风格。其次,OOP是一种软件开发方法,一种编程范式,面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
而基于JS进行重载时,通过原生JS在方法执行过程中arguments.length判断参数长度实现重载,也就决定了该方案需要在JS代码段里实现互通逻辑,同时需要判断参数类型,使其更繁琐和复杂,对于后期扩展和协同开发都带来很大不便,虽然可以利用面向对象的高聚合低耦合的特征,通过面向对象的重载解决该技术问题,但是现有的JS并未出现面向对象的重载技术。
发明内容
本发明的主要目的在于解决现有的JS并未出现面向对象的重载技术的技术问题。
本发明第一方面提供了一种对象重载方法,包括:获取待重载对象,并解析所述待重载对象,得到所述待重载对象对应的第一函数名称和第一参数类型;对相同函数名称的待重载对象对应的第一函数名称和第一参数类型进行包装,得到重载函数,并通过所述重载函数分别对对应的待重载对象进行重载;在执行重载后的对象时,获取对象调用请求,并根据所述对象调用请求,通过所述重载函数,对所述对象调用请求所指定的目标对象进行定位;调用定位到的目标对象并执行。
可选的,在本发明第一方面的第一种实现方式中,所述对相同函数名称的待重载对象对应的第一函数名称和第一参数类型进行包装,得到重载函数包括:将相同函数名称的待重载对象对应的第一函数名称作为第一形参,以及将相同函数名称的待重载对象对应的第一参数类型作为第二形参,其中,第二形参包括参数长度和参数语法类型;采用预置重载函数模板包装第一形参,并第二形参包装至所述重载函数模板中的重载调用函数中,得到重载函数。
可选的,在本发明第一方面的第二种实现方式中,所述根据所述对象调用请求,通过所述重载函数,对所述对象调用请求所指定的目标对象进行定位包括:解析所述对象调用请求,得到待调用对象的第二函数名称和输入信息,并采用所述第二函数名称和所述输入信息执行所述重载函数,得到执行结果;根据所述执行结果,判断所述重载函数是否对所述对象调用请求所指定的目标对象定位成功;若定位成功,则根据执行结果,确定对所述象调用请求所指定的目标对象。
可选的,在本发明第一方面的第三种实现方式中,所述采用所述第二函数名称和所述输入信息执行所述重载函数,得到执行结果包括:将所述第二函数名称作为第一实参,以及将所述输入信息作为第二实参;采用所述第一实参对所述第一形参进行赋值,以及采用所述第二实参对所述第二形参进行赋值,并执行赋值后的重载函数,得到执行结果。
可选的,在本发明第一方面的第四种实现方式中,所述根据所述执行结果,判断所述重载函数是否对所述对象调用请求所指定的目标对象定位成功包括:根据所述执行结果,判断所述第二实参是否满足所述重载函数中的第一参数类型;若满足,则确定所述重载参数对所述对象调用请求所指定的目标对象定位成功,否则确定所述重载参数对所述对象调用请求所指定的目标对象定位异常。
可选的,在本发明第一方面的第五种实现方式中,在所述通过所述重载函数分别对对应的待重载对象进行重载之后,还包括:获取待重载新增对象,并解析所述待重载新增对象,得到所述待重载新增对象的第二参数类型和第三函数名称;根据所述第三函数名称,遍历各所述重载函数,并根据遍历结果,判断各所述重载函数中是否存在与所述第三函数名称相同的第一函数名称;若存在,则将所述第二参数类型和所述第三函数名称包装至与所述第三函数名称相同的第一函数名称对应的重载函数,并采用已包装所述第二参数类型和所述第三函数名称的重载函数对所述待重载新增对象进行重载。
可选的,在本发明第一方面的第六种实现方式中,在所述调用定位到的目标对象并执行之前,还包括:获取所述目标对象对应的仿真数据和校验结果,并计算所述目标对象执行所述仿真数据时的预计算结果;判断所述预计算结果和所述校验结果是否一致;若所述预计算结果和所述校验结果一致,则所述目标对象符合调用条件,否则停止对所述目标对象的调用,并返回所述预计算结果和所述校验结果。
本发明第二方面提供了一种对象重载装置,包括:解析模块,用于获取待重载对象,并解析所述待重载对象,得到所述待重载对象对应的第一函数名称和第一参数类型;封装模块,用于对相同函数名称的待重载对象对应的第一函数名称和第一参数类型进行包装,得到重载函数,并通过所述重载函数分别对对应的待重载对象进行重载;定位模块,用于在执行重载后的对象时,获取对象调用请求,并根据所述对象调用请求,通过所述重载函数,对所述对象调用请求所指定的目标对象进行定位;调用模块,用于调用定位到的目标对象并执行。
可选的,在本发明第二方面的第一种实现方式中,所述封装模块包括:转换单元,用于将相同函数名称的待重载对象对应的第一函数名称作为第一形参,以及将相同函数名称的待重载对象对应的第一参数类型作为第二形参,其中,第二形参包括参数长度和参数语法类型;包装单元,用于采用预置重载函数模板包装第一形参,并第二形参包装至所述重载函数模板中的重载调用函数中,得到重载函数。
可选的,在本发明第二方面的第二种实现方式中,所述定位模块包括:执行单元,用于解析所述对象调用请求,得到待调用对象的第二函数名称和输入信息,并采用所述第二函数名称和所述输入信息执行所述重载函数,得到执行结果;定位单元,用于根据所述执行结果,判断所述重载函数是否对所述对象调用请求所指定的目标对象定位成功;若定位成功,则根据执行结果,确定对所述象调用请求所指定的目标对象。
可选的,在本发明第二方面的第三种实现方式中,所述执行单元还用于:将所述第二函数名称作为第一实参,以及将所述输入信息作为第二实参;采用所述第一实参对所述第一形参进行赋值,以及采用所述第二实参对所述第二形参进行赋值,并执行赋值后的重载函数,得到执行结果。
可选的,在本发明第二方面的第四种实现方式中,所述定位单元还用于:根据所述执行结果,判断所述第二实参是否满足所述重载函数中的第一参数类型;若满足,则确定所述重载参数对所述对象调用请求所指定的目标对象定位成功,否则确定所述重载参数对所述对象调用请求所指定的目标对象定位异常。
可选的,在本发明第二方面的第五种实现方式中,所述对象重载装置还包括新增模块,用于:获取待重载新增对象,并解析所述待重载新增对象,得到所述待重载新增对象的第二参数类型和第三函数名称;根据所述第三函数名称,遍历各所述重载函数,并根据遍历结果,判断各所述重载函数中是否存在与所述第三函数名称相同的第一函数名称;若存在,则将所述第二参数类型和所述第三函数名称包装至与所述第三函数名称相同的第一函数名称对应的重载函数,并采用已包装所述第二参数类型和所述第三函数名称的重载函数对所述待重载新增对象进行重载。
可选的,在本发明第二方面的第六种实现方式中,所述对象重载装置还包括校验模块,用于获取所述目标对象对应的仿真数据和校验结果,并计算所述目标对象执行所述仿真数据时的预计算结果;判断所述预计算结果和所述校验结果是否一致;若所述预计算结果和所述校验结果一致,则所述目标对象符合调用条件,否则停止对所述目标对象的调用,并返回所述预计算结果和所述校验结果。
本发明第三方面提供了一种对象重载设备,包括:存储器和至少一个处理器,所述存储器中存储有指令;所述至少一个处理器调用所述存储器中的所述指令,以使得所述对象重载设备执行上述的对象重载方法。
本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述的对象重载方法。
本发明提供的技术方案中,通过对待重载对象的第一函数名称和第一参数类型包装到一个重载函数中,在重载函数定义时对同名函数进行归类,同时界定第一参数类型,比如参数个数及参数语法类型,实现函数命中路由。即可获得类似于劫持的能力,在对象调用时,执行一些繁琐但是固定的流程判断,做到类似路由具体函数的能力,通过重载函数对对象进行重载,改进了JS的重载特性,不同传参逻辑互相是直接解耦合的,后续扩展也无需对历史代码做单元测试。
附图说明
图1为本发明实施例中对象重载方法的第一个实施例示意图;
图2为本发明实施例中对象重载方法的第二个实施例示意图;
图3为本发明实施例中对象重载方法的第三个实施例示意图;
图4为本发明实施例中对象重载装置的一个实施例示意图;
图5为本发明实施例中对象重载装置的另一个实施例示意图;
图6为本发明实施例中对象重载设备的一个实施例示意图。
具体实施方式
本发明实施例提供了一种对象重载方法、装置、设备及存储介质,获取待重载对象,并解析待重载对象,得到待重载对象对应的第一函数名称和第一参数类型;对相同函数名称的待重载对象对应的第一函数名称和第一参数类型进行包装,得到重载函数,并通过重载函数分别对对应的待重载对象进行重载;在执行重载后的对象时,获取对象调用请求,并根据对象调用请求,通过重载函数,对对象调用请求所指定的目标对象进行定位;调用定位到的目标对象并执行。本发明实现了JS面向对象的重载,降低了后期拓展的难度和逻辑判别复杂程度。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为便于理解,下面对本发明实施例的具体流程进行描述,请参阅图1,本发明实施例中对象重载方法的第一个实施例包括:
101、获取待重载对象,并解析待重载对象,得到待重载对象对应的第一函数名称和第一参数类型;
可以理解的是,本发明的执行主体可以为对象重载装置,还可以是终端或者服务器,具体此处不做限定。本发明实施例以服务器为执行主体为例进行说明。
本申请实施例可以基于人工智能技术对相关的数据进行获取和处理。其中,人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。
人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、机器人技术、生物识别技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
本实施例中,开发人员在开发阶段,针对不同的应用场景、功能、算法等方式对函数对象进行分类命名,比如针对多个不同用户登录验证的函数对象,均命名为“login”。此时在对多个函数对象进行重载时,直接根据函数名称进行分类,将相同函数名称的函数对象分为一类,即可以得到一个类别或者多个类别,并以函数名称进行区别。另外还对待重载函数对象的入参条件进行定义,作为第一参数类型,包括参数长度和参数语法类型,此处直接解析,即可直接得到第一参数类型,比如针对用户手机登录的函数对象,参数长度为11个字节,参数语法类型为int型。
比如在一个Web项目中,包含用户登录功能、跳转功能。其中,用户登录功能采用用户登录逻辑的函数对象实现,函数名称命名为“login”,包括机号+短信验证码的验证逻辑、账户名+密码的验证逻辑两个函数对象;跳转功能采用页面跳转逻辑的函数对象实现,函数名称命名为“location”,包括重新请求页面的跳转逻辑、请求重定向的跳转逻辑两个函数对象。则此处将手机号+短信验证码的验证逻辑、账户名+密码的验证逻辑的两个函数对象分为一类,将重新请求页面的跳转逻辑、请求重定向的跳转逻辑两个函数对象分为一类。
另外,针对手机号+短信验证码的验证逻辑、账户名+密码的验证逻辑的两个函数对象,将手机号+短信验证码的第一参数类型的参数长度限定为11个字节和6个字节,参数语法类型为number,将账户名+密码的第一参数类型的参数长度均限定为6-18,参数语法类型为string。
102、对相同函数名称的待重载对象对应的第一函数名称和第一参数类型进行包装,得到重载函数,并通过重载函数分别对对应的待重载对象进行重载;
本实施例中,针对相同的第一函数名称的待重载函数对象,将第一函数名称和对应的第一参数类别同时包装为同一个重载函数中,比如在计算器的功能中,在收入一个数值点击加号则返回值的本身,在收入2个值的同时则返回2个值相加结果,则可以将两个加法功能的第一函数名称和第一参数类型同时包装至同一个重载函数中,其中,第一参数类型限定入参的参数语法类型为int;部分重载函数具体可以表示为Overload.func(“add”,function(num_int))和Overload.func(“add”,function(num1_int,num2_int)),其中,“add”为加法功能的名称,“num_int”和“num1_int,num2_int”为两个第一参数类型。
另外,通过包装后的重载函数,将待重载函数对象的主体重载,并存储在预置的数据库中,以供后续函数对象调用时,可以通过函数名称和参数类型进行定位和调用,比如通过add(1)输入一个数值,可以调用前述的第一个加法功能对应的函数对象,通过add(1,2)同时输入两个数值,可以调用前述的第二个加法功能对应的函数对象。
103、在执行重载后的对象时,获取对象调用请求,并根据对象调用请求,通过重载函数,对对象调用请求所指定的目标对象进行定位;
本实施例中,在对重载后的函数对象进行调用时,在接受到对象调用请求时,通过对象调用请求中携带的函数名称和输入信息,匹配重载函数中的第一函数名称和第一参数类型,如果匹配到,则在对应的重载函数中,采用第一函数对象和第一参数类型定义到目标函数对象。
比如,在获取得到的对象调用请求中,包含函数名称“add”和参数“1,2”,则通过“add”,找到包含Overload.func(“add”,function(num_int))和Overload.func(“add”,function(num1_int,num2_int))的重载函数,并通过和“1,2”匹配“num1_int,num2_int”,则根据function(num1_int,num2_int)可以定位到对象调用请求指定的目标函数对象。
104、调用定位到的目标对象并执行。
本实施例中,根据定位到的目标函数进行调用,即为实现重载函数对象的调用。
本发明实施例中,通过对待重载对象的第一函数名称和第一参数类型包装到一个重载函数中,在重载函数定义时对同名函数进行归类,同时界定第一参数类型,比如参数个数及参数语法类型,实现函数命中路由。即可获得类似于劫持的能力,在对象调用时,执行一些繁琐但是固定的流程判断,做到类似路由具体函数的能力,通过重载函数对对象进行重载,改进了JS的重载特性,不同传参逻辑互相是直接解耦合的,后续扩展也无需对历史代码做单元测试。
请参阅图2,本发明实施例中对象重载方法的第二个实施例包括:
201、获取待重载对象,并解析待重载对象,得到待重载对象对应的第一函数名称和第一参数类型;
202、将相同函数名称的待重载对象对应的第一函数名称作为第一形参,以及将相同函数名称的待重载对象对应的第一参数类型作为第二形参,其中,第二形参包括参数长度和参数语法类型;
203、采用预置重载函数模板包装第一形参,并第二形参包装至重载函数模板中的重载调用函数中,得到重载函数;
本实施例中,第一函数名称和第一参数类型均为形参类型,分别作为第一形参和第二形参,当输入具体的实参与第一形参和第二形参相撇皮时,可以调用第一函数名称和第一参数类型定义的函数对象。比如前述的“add”和“num1_int,num2_int”分别为第一形参和第二形参,“1,“2”为实参,输入“1,2”后,根据“add”和“num1_int,num2_int”可以调用前述的第二个加法功能对应的函数对象。
具体的,通过第二形参制定第一参数类型的语法规则,至少包括参数长度和参数语法类型,比如针对需要输入手机号码实参的第二形参,可以制定输入参数长度为11个字节,参数语法类型为int的语法规则,针对需要输入用户名称的第二形参,可以制定长度为6-18个字节,参数语法类型为string的参数语法类型。
另外,在将第一形参和第二形参包装成重载函数时,需要采用重载函数模板进行包装,比如Overload.func(第一形参,function(第二形参)),可以分为包括两部分,包括固定的“Overload.func()”的重载定义和根据函数对象类型选择“function()”的功能定义,即重载调用函数。
204、通过重载函数分别对对应的待重载对象进行重载;
205、在执行重载后的对象时,获取对象调用请求,解析对象调用请求,得到待调用对象的第二函数名称和输入信息,并采用第二函数名称和输入信息执行重载函数,得到执行结果;
206、根据执行结果,判断重载函数是否对对象调用请求所指定的目标对象定位成功;
207、若定位成功,则根据执行结果,确定对象调用请求所指定的目标对象;
本实施例中,重载函数中还包含用于实现重载函数的调用代码行,解析对象调用请求,即可得到对象调用请求中携带的第二函数名称和输入信息,然后将第二函数名称和输入信息执行赋值到重载函数中的调用代码行,通过第二函数名称查找带有相同函数名称的重载函数,通过输入信息查找目标函数对象。另外,如果无法找到与第二函数名称相同的重载函数,或者无法找到匹配输入信息的参数类型,则重载函数定位失败,无法找到对象调用请求指定的目标函数对象。比如针对Overload.func(“add”,function(num_int)),调用代码行可以表示为add(n),n为int类型的输入信息。
208、获取目标对象对应的仿真数据和校验结果,并计算目标对象执行仿真数据时的预计算结果;
209、判断预计算结果和校验结果是否一致;
210、若预计算结果和校验结果一致,则目标对象符合调用条件,否则停止对目标对象的调用,并返回预计算结果和校验结果;
本实施例中,为了减少计算冗余,若没有修改预设的参数时,即不产生新的结果时,无需对目标对象进行重新计算,直接投入使用即可。此处再加入预设的仿真数据和校验结果,进一步对该目标对象进行验证,验证通过,才能进行实际的应用。在目标对象的执行流程中,需确定每个执行节点应用仿真数据时,输出的校验结果是否与预先设置的校验结果一致,如果一致,则可以说明,目标对象符合预期,可以直接进行实际应用,否则说明目标对象出错,需要开发人员进一步排除错误后从新进行对象重载和调用。
211、调用定位到的目标对象并执行。
本发明实施例中,通过将第一函数名称作为第一形参,第一参数类型作为第二形参,包装到重载函数中,实现对待重载对象的重载,然后在调用对象时,将对象调用请求中的第二函数名称作为第一实参,以及将输入信息作为第二实参代入重载函数中的第一形参和第二形参,即可判别需要调用的重载对象,实现重载对象的调用。
请参阅图3,本发明实施例中对象重载方法的第三个实施例包括:
301、获取待重载对象,并解析待重载对象,得到待重载对象对应的第一函数名称和第一参数类型;
302、对相同函数名称的待重载对象对应的第一函数名称和第一参数类型进行包装,得到重载函数,并通过重载函数分别对对应的待重载对象进行重载;
303、获取待重载新增对象,并解析待重载新增对象,得到待重载新增对象的第二参数类型和第三函数名称;
304、根据第三函数名称,遍历各重载函数,并根据遍历结果,判断各重载函数中是否存在与第三函数名称相同的第一函数名称;
305、若存在,则将第二参数类型和第三函数名称包装至与第三函数名称相同的第一函数名称对应的重载函数,并采用已包装第二参数类型和第三函数名称的重载函数对待重载新增对象进行重载;
本实施例中,可以对函数对象重载进行横向拓展和纵向拓展。在获取到新增函数对象时,先判断该新增函数对象的第三函数名称是否在重载函数中已经存在,如果存在,则对函数对象重载进行横向拓展,将该新增函数对象的第三函数名称和对应的第三参数类别包装到相同函数名称的重载函数中;如果不存在,则对函数对象重载进行纵向扩展,将第三函数名称和第三参数类别包装成新的重载函数即可。
比如已经存在包含Overload.func(“add”,function(num_int))和Overload.func(“add”,function(num1_int,num2_int))的重载函数,在收入3个值的同时则返回3个值相加结果时,采用的函数对象对应的第三函数名称和第二参数类型分别为“add”和“num1_int,num2_int,num3_int”,则可以确定重载函数中存在“add”的函数名称,则将“add”和“num1_int,num2_int,num3_int”包装至该函数名称即可,得到包含Overload.func(“add”,function(num_int))、Overload.func(“add”,function(num1_int,num2_int))和Overload.func(“add”,function(num1_int,num2_int,num3_int))的重载函数。
306、在执行重载后的对象时,获取对象调用请求,解析对象调用请求,得到待调用对象的第二函数名称和输入信息,并将第二函数名称作为第一实参,以及将输入信息作为第二实参;
307、采用第一实参对第一形参进行赋值,以及采用第二实参对第二形参进行赋值,并执行赋值后的重载函数,得到执行结果;
本实施例中,第二函数名称和输入信息作为实参,分别作为第一实参和第二实参,输入到重载函数中,即可执行重载函数。
308、根据执行结果,判断第二实参是否满足重载函数中的第一参数类型;
309、若满足,则确定重载参数对对象调用请求所指定的目标对象定位成功,否则确定重载参数对对象调用请求所指定的目标对象定位异常;
本实施例中,在通过第二函数名称的第一实参找到相同函数名称的重载函数后,还进一步通过输入信息的判断第二形参是否满足已经定义好的第一参数类型或者第二参数类型,即此处将第一参数类型和第二参数类型作为参数语法规则,只有满足第一参数类型或者第二参数类型的参数语法规则的,才能匹配成功,并成功定位,否则定位失败,返回定位异常的结果。
比如在包含Overload.func(“add”,function(num_int))的重载函数中,第一实参为“add”,第二实参为““1””或者“1,2,3”,均为定位异常,其中,“1”为string的参数语法类型,而重载函数定义函数对象的参数语法类型为int,两者不匹配,而“1,2,3”为三个字符,重载函数定义函数对象的参数长度为1个字节,故两者仍不匹配。
310、若定位成功,则根据执行结果,确定对象调用请求所指定的目标对象;
311、调用定位到的目标对象并执行。
本发明实施例中,在新增重载对象或者在后续第一形参或者第二形参的逻辑发送变化后,可以对原代码不做倾入式的改动,直接定义一个新对象即可,通过第三函数名称和第二参数类型即可实现对象的重载;同时,还可以扩展一些语法规范,比如num1_int代表为int型的形参传递,如果使用string型的则会出现异常,以此类推可以扩展更多类型。
上面对本发明实施例中对象重载方法进行了描述,下面对本发明实施例中对象重载装置进行描述,请参阅图4,本发明实施例中对象重载装置一个实施例包括:
解析模块401,用于获取待重载对象,并解析所述待重载对象,得到所述待重载对象对应的第一函数名称和第一参数类型;
封装模块402,用于对相同函数名称的待重载对象对应的第一函数名称和第一参数类型进行包装,得到重载函数,并通过所述重载函数分别对对应的待重载对象进行重载;
定位模块403,用于在执行重载后的对象时,获取对象调用请求,并根据所述对象调用请求,通过所述重载函数,对所述对象调用请求所指定的目标对象进行定位;
调用模块404,用于调用定位到的目标对象并执行。
本发明实施例中,通过对待重载对象的第一函数名称和第一参数类型包装到一个重载函数中,在重载函数定义时对同名函数进行归类,同时界定第一参数类型,比如参数个数及参数语法类型,实现函数命中路由。即可获得类似于劫持的能力,在对象调用时,执行一些繁琐但是固定的流程判断,做到类似路由具体函数的能力,通过重载函数对对象进行重载,改进了JS的重载特性,不同传参逻辑互相是直接解耦合的,后续扩展也无需对历史代码做单元测试。
请参阅图5,本发明实施例中对象重载装置的另一个实施例包括:
解析模块401,用于获取待重载对象,并解析所述待重载对象,得到所述待重载对象对应的第一函数名称和第一参数类型;
封装模块402,用于对相同函数名称的待重载对象对应的第一函数名称和第一参数类型进行包装,得到重载函数,并通过所述重载函数分别对对应的待重载对象进行重载;
定位模块403,用于在执行重载后的对象时,获取对象调用请求,并根据所述对象调用请求,通过所述重载函数,对所述对象调用请求所指定的目标对象进行定位;
调用模块404,用于调用定位到的目标对象并执行。
具体的,所述封装模块402包括:
转换单元4021,用于将相同函数名称的待重载对象对应的第一函数名称作为第一形参,以及将相同函数名称的待重载对象对应的第一参数类型作为第二形参,其中,第二形参包括参数长度和参数语法类型;
包装单元4022,用于采用预置重载函数模板包装第一形参,并第二形参包装至所述重载函数模板中的重载调用函数中,得到重载函数。
具体的,所述定位模块403包括:
执行单元4031,用于解析所述对象调用请求,得到待调用对象的第二函数名称和输入信息,并采用所述第二函数名称和所述输入信息执行所述重载函数,得到执行结果;
定位单元4032,用于根据所述执行结果,判断所述重载函数是否对所述对象调用请求所指定的目标对象定位成功;若定位成功,则根据执行结果,确定对所述象调用请求所指定的目标对象。
具体的,所述执行单元4031还用于:
将所述第二函数名称作为第一实参,以及将所述输入信息作为第二实参;
采用所述第一实参对所述第一形参进行赋值,以及采用所述第二实参对所述第二形参进行赋值,并执行赋值后的重载函数,得到执行结果。
具体的,所述定位单元4032还用于:
根据所述执行结果,判断所述第二实参是否满足所述重载函数中的第一参数类型;
若满足,则确定所述重载参数对所述对象调用请求所指定的目标对象定位成功,否则确定所述重载参数对所述对象调用请求所指定的目标对象定位异常。
具体的,所述对象重载装置还包括新增模块405,用于:
获取待重载新增对象,并解析所述待重载新增对象,得到所述待重载新增对象的第二参数类型和第三函数名称;
根据所述第三函数名称,遍历各所述重载函数,并根据遍历结果,判断各所述重载函数中是否存在与所述第三函数名称相同的第一函数名称;
若存在,则将所述第二参数类型和所述第三函数名称包装至与所述第三函数名称相同的第一函数名称对应的重载函数,并采用已包装所述第二参数类型和所述第三函数名称的重载函数对所述待重载新增对象进行重载。
具体的,所述对象重载装置还包括校验模块406,用于:
获取所述目标对象对应的仿真数据和校验结果,并计算所述目标对象执行所述仿真数据时的预计算结果;
判断所述预计算结果和所述校验结果是否一致;
若所述预计算结果和所述校验结果一致,则所述目标对象符合调用条件,否则停止对所述目标对象的调用,并返回所述预计算结果和所述校验结果。
本发明实施例中,通过将第一函数名称作为第一形参,第一参数类型作为第二形参,包装到重载函数中,实现对待重载对象的重载,然后在调用对象时,将对象调用请求中的第二函数名称作为第一实参,以及将输入信息作为第二实参代入重载函数中的第一形参和第二形参,即可判别需要调用的重载对象,实现重载对象的调用;在新增重载对象或者在后续第一形参或者第二形参的逻辑发送变化后,可以对原代码不做倾入式的改动,直接定义一个新对象即可,通过第三函数名称和第二参数类型即可实现对象的重载;同时,还可以扩展一些语法规范,比如num1_int代表为int型的形参传递,如果使用string型的则会出现异常,以此类推可以扩展更多类型。
上面图4和图5从模块化功能实体的角度对本发明实施例中的对象重载装置进行详细描述,下面从硬件处理的角度对本发明实施例中对象重载设备进行详细描述。
图6是本发明实施例提供的一种对象重载设备的结构示意图,该对象重载设备600可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessing units,CPU)610(例如,一个或一个以上处理器)和存储器620,一个或一个以上存储应用程序633或数据632的存储介质630(例如一个或一个以上海量存储设备)。其中,存储器620和存储介质630可以是短暂存储或持久存储。存储在存储介质630的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对对象重载设备600中的一系列指令操作。更进一步地,处理器610可以设置为与存储介质630通信,在对象重载设备600上执行存储介质630中的一系列指令操作。
对象重载设备600还可以包括一个或一个以上电源640,一个或一个以上有线或无线网络接口650,一个或一个以上输入输出接口660,和/或,一个或一个以上操作系统631,例如Windows Serve,Mac OS X,Unix,Linux,FreeBSD等等。本领域技术人员可以理解,图6示出的对象重载设备结构并不构成对对象重载设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
本发明还提供一种对象重载设备,所述计算机设备包括存储器和处理器,存储器中存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行上述各实施例中的所述对象重载方法的步骤。
本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行所述对象重载方法的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种对象重载方法,其特征在于,所述对象重载方法包括:
获取待重载对象,并解析所述待重载对象,得到所述待重载对象对应的第一函数名称和第一参数类型;
对相同函数名称的待重载对象对应的第一函数名称和第一参数类型进行包装,得到重载函数,并通过所述重载函数分别对对应的待重载对象进行重载;
在执行重载后的对象时,获取对象调用请求,并根据所述对象调用请求,通过所述重载函数,对所述对象调用请求所指定的目标对象进行定位;
调用定位到的目标对象并执行。
2.根据权利要求1所述的对象重载方法,其特征在于,所述对相同函数名称的待重载对象对应的第一函数名称和第一参数类型进行包装,得到重载函数包括:
将相同函数名称的待重载对象对应的第一函数名称作为第一形参,以及将相同函数名称的待重载对象对应的第一参数类型作为第二形参,其中,第二形参包括参数长度和参数语法类型;
采用预置重载函数模板包装第一形参,并第二形参包装至所述重载函数模板中的重载调用函数中,得到重载函数。
3.根据权利要求2所述的对象重载方法,其特征在于,所述根据所述对象调用请求,通过所述重载函数,对所述对象调用请求所指定的目标对象进行定位包括:
解析所述对象调用请求,得到待调用对象的第二函数名称和输入信息,并采用所述第二函数名称和所述输入信息执行所述重载函数,得到执行结果;
根据所述执行结果,判断所述重载函数是否对所述对象调用请求所指定的目标对象定位成功;
若定位成功,则根据执行结果,确定对所述象调用请求所指定的目标对象。
4.根据权利要求3所述的对象重载方法,其特征在于,所述采用所述第二函数名称和所述输入信息执行所述重载函数,得到执行结果包括:
将所述第二函数名称作为第一实参,以及将所述输入信息作为第二实参;
采用所述第一实参对所述第一形参进行赋值,以及采用所述第二实参对所述第二形参进行赋值,并执行赋值后的重载函数,得到执行结果。
5.根据权利要求4所述的对象重载方法,其特征在于,所述根据所述执行结果,判断所述重载函数是否对所述对象调用请求所指定的目标对象定位成功包括:
根据所述执行结果,判断所述第二实参是否满足所述重载函数中的第一参数类型;
若满足,则确定所述重载参数对所述对象调用请求所指定的目标对象定位成功,否则确定所述重载参数对所述对象调用请求所指定的目标对象定位异常。
6.根据权利要求1-5中任一项所述的对象重载方法,其特征在于,在所述通过所述重载函数分别对对应的待重载对象进行重载之后,还包括:
获取待重载新增对象,并解析所述待重载新增对象,得到所述待重载新增对象的第二参数类型和第三函数名称;
根据所述第三函数名称,遍历各所述重载函数,并根据遍历结果,判断各所述重载函数中是否存在与所述第三函数名称相同的第一函数名称;
若存在,则将所述第二参数类型和所述第三函数名称包装至与所述第三函数名称相同的第一函数名称对应的重载函数,并采用已包装所述第二参数类型和所述第三函数名称的重载函数对所述待重载新增对象进行重载。
7.根据权利要求1所述的对象重载方法,其特征在于,在所述调用定位到的目标对象并执行之前,还包括:
获取所述目标对象对应的仿真数据和校验结果,并计算所述目标对象执行所述仿真数据时的预计算结果;
判断所述预计算结果和所述校验结果是否一致;
若所述预计算结果和所述校验结果一致,则所述目标对象符合调用条件,否则停止对所述目标对象的调用,并返回所述预计算结果和所述校验结果。
8.一种对象重载装置,其特征在于,所述对象重载装置包括:
解析模块,用于获取待重载对象,并解析所述待重载对象,得到所述待重载对象对应的第一函数名称和第一参数类型;
封装模块,用于对相同函数名称的待重载对象对应的第一函数名称和第一参数类型进行包装,得到重载函数,并通过所述重载函数分别对对应的待重载对象进行重载;
定位模块,用于在执行重载后的对象时,获取对象调用请求,并根据所述对象调用请求,通过所述重载函数,对所述对象调用请求所指定的目标对象进行定位;
调用模块,用于调用定位到的目标对象并执行。
9.一种对象重载设备,其特征在于,所述对象重载设备包括:存储器和至少一个处理器,所述存储器中存储有指令;
所述至少一个处理器调用所述存储器中的所述指令,以使得所述对象重载设备执行如权利要求1-7中任意一项所述的对象重载方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,其特征在于,所述指令被处理器执行时实现如权利要求1-7中任意一项所述对象重载方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111010981.4A CN113703879B (zh) | 2021-08-31 | 2021-08-31 | 对象重载方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111010981.4A CN113703879B (zh) | 2021-08-31 | 2021-08-31 | 对象重载方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113703879A true CN113703879A (zh) | 2021-11-26 |
CN113703879B CN113703879B (zh) | 2023-10-20 |
Family
ID=78657854
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111010981.4A Active CN113703879B (zh) | 2021-08-31 | 2021-08-31 | 对象重载方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113703879B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942131A (zh) * | 2013-01-23 | 2014-07-23 | 腾讯科技(深圳)有限公司 | 监控底层接口是否变化的方法及装置 |
CN104331368A (zh) * | 2014-11-18 | 2015-02-04 | 合肥康捷信息科技有限公司 | 一种基于cfg文件静态分析C++虚函数调用的方法 |
CN106227671A (zh) * | 2016-08-05 | 2016-12-14 | 网易(杭州)网络有限公司 | 程序运行性能分析方法及装置 |
-
2021
- 2021-08-31 CN CN202111010981.4A patent/CN113703879B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942131A (zh) * | 2013-01-23 | 2014-07-23 | 腾讯科技(深圳)有限公司 | 监控底层接口是否变化的方法及装置 |
CN104331368A (zh) * | 2014-11-18 | 2015-02-04 | 合肥康捷信息科技有限公司 | 一种基于cfg文件静态分析C++虚函数调用的方法 |
CN106227671A (zh) * | 2016-08-05 | 2016-12-14 | 网易(杭州)网络有限公司 | 程序运行性能分析方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113703879B (zh) | 2023-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109086031B (zh) | 一种基于规则引擎的业务决策方法和装置 | |
US8589861B2 (en) | Code generation | |
CN111736954B (zh) | 多智能合约虚拟机实现方法、多智能合约虚拟机及系统 | |
US9521209B2 (en) | Code generation | |
CN111198863A (zh) | 一种规则引擎及其实现方法 | |
CN108965375B (zh) | 服务调用代理控制系统、方法、服务器及可读存储介质 | |
Aggarwal et al. | Test case generation from uml state machine diagram: A survey | |
CN112965720A (zh) | 一种组件编译方法、装置、设备及计算机可读存储介质 | |
CN111459621B (zh) | 云仿真集成与调度方法、装置、计算机设备和存储介质 | |
CN114610318A (zh) | 安卓应用程序的打包方法、装置、设备及存储介质 | |
CN115543419A (zh) | 一种软件开发工具包的生成方法、装置、设备及存储介质 | |
CN114819553A (zh) | 基于工作流引擎的动态配置方法、装置、设备及存储介质 | |
CN113703879B (zh) | 对象重载方法、装置、设备及存储介质 | |
Fortier et al. | Dyninka: a FaaS framework for distributed dataflow applications | |
CN111580821B (zh) | 脚本绑定方法、装置、电子设备及计算机可读存储介质 | |
CN102810065B (zh) | 用于加载程序模块的方法和系统 | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
Terzimehić | Optimization and reconfiguration of iec 61499-based software architectures | |
CN107483559A (zh) | Sdk服务的提供方法及装置 | |
CN112650502A (zh) | 批处理任务处理方法、装置、计算机设备和存储介质 | |
CN116719627B (zh) | 数据处理方法、装置、设备及存储介质 | |
Chang et al. | Support NNEF execution model for NNAPI | |
US10108743B2 (en) | Methods and systems for simplifying object mapping for user interfaces | |
CN116700727B (zh) | 一种跨平台的数据处理方法及系统 | |
US20240176641A1 (en) | Apparatus and method for executing digital twin |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |