CN111736847B - 脚本语言映射方法、电子设备及可读存储介质 - Google Patents
脚本语言映射方法、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN111736847B CN111736847B CN202010545053.7A CN202010545053A CN111736847B CN 111736847 B CN111736847 B CN 111736847B CN 202010545053 A CN202010545053 A CN 202010545053A CN 111736847 B CN111736847 B CN 111736847B
- Authority
- CN
- China
- Prior art keywords
- function
- parameters
- calling
- mapping relation
- target
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 251
- 238000013507 mapping Methods 0.000 title claims abstract description 94
- 230000006870 function Effects 0.000 claims abstract description 290
- 238000004891 communication Methods 0.000 claims abstract description 56
- 238000006243 chemical reaction Methods 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 7
- 238000007493 shaping process Methods 0.000 claims description 6
- 230000002159 abnormal effect Effects 0.000 abstract description 10
- 230000008569 process Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/81—Indexing, e.g. XML tags; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/84—Mapping; Conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明实施例提供了一种脚本语言映射方法、电子设备及可读存储介质,方法包括:当执行脚本文件中的目标函数时,确定与目标函数对应的调用函数,通过调用函数从通信栈获取目标函数的两个预设参数,并判断对象标识对应的对象是否实现与对象方法名对应的对象方法,若对象标识对应的对象未实现与对象方法名对应的对象方法,则禁止执行对象方法。也即即使当执行脚本文件中的目标函数时,不直接根据元表中的映射关系确定与目标函数对应的方法,而是确定调用函数,在判断出对象标识对应的对象未实现与对象方法名对应的对象方法的情况下,禁止执行所述对象方法,从而避免脚本文件执行失败以及应用程序运行异常的问题。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种脚本语言映射方法、电子设备及可读存储介质。
背景技术
随着互联网的快速发展,智能电子设备已经成为人们生活中不可或缺的工具之一。电子设备的广泛应用,电子设备上的应用程序也随着用户的需求进行资源更新。
现有技术中,如果需要更新应用程序的版本,需要服务器向电子设备(例如智能手机)下发与版本对应的脚本文件,电子设备根据脚本文件对应用程序的版本进行更新。应用程序的版本包括旧版本和新版本,如果服务器向安装了应用程序的旧版本的电子设备发送的脚本文件与旧版本不对应,例如,脚本文件中存在用于表示新类的新类符号和新类的新函数的新函数符号,但是电子设备的应用程序的旧版本中并未定义新类符号与旧版本中的某个类的映射关系,新函数符号与旧版本中的该类的方法的映射关系,则该电子设备在执行脚本文件的过程中会造成应用程序运行异常的问题。
发明内容
本发明实施例的目的在于提供一种脚本语言映射方法、电子设备及可读存储介质,以实现服务器向安装了应用程序的旧版本的电子设备发送的脚本文件与旧版本不对应的情况下,导致电子设备在执行脚本文件的过程中会造成应用程序运行异常的问题。具体技术方案如下:
在本发明实施的第一方面,首先提供了一种脚本语言映射方法,执行于电子设备,包括:
当执行应用程序的脚本文件中的目标函数时,确定与所述目标函数对应的调用函数,其中,所述脚本文件为通过脚本语言编写的,所述调用函数为通过所述编译语言编写的函数;
通过所述调用函数从所述脚本语言与所述编译语言之间的通信栈获取所述目标函数的两个预设参数,其中,所述两个预设参数包括所述目标函数对应的对象标识和所述对象标识对应的对象方法名;
判断所述对象标识对应的对象是否实现与所述对象方法名对应的对象方法;
若所述对象标识对应的对象未实现与所述对象方法名对应的对象方法,则禁止执行所述对象方法。
在本发明实施的第二方面,还提供了一种电子设备,包括:
第一确定模块,用于当执行应用程序的脚本文件中的目标函数时,确定与所述目标函数对应的调用函数,其中,所述脚本文件为通过脚本语言编写的,所述调用函数为通过所述编译语言编写的函数;
获取模块,用于通过所述调用函数从所述脚本语言与所述编译语言之间的通信栈获取所述目标函数的两个预设参数,其中,所述两个预设参数包括所述目标函数对应的对象标识和所述对象标识对应的对象方法名;
第一判断模块,用于判断所述对象标识对应的对象是否实现与所述对象方法名对应的对象方法;
所述第一判断模块,还用于若所述对象标识对应的对象未实现与所述对象方法名对应的对象方法,则禁止执行所述对象方法。
在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述任一所述的脚本语言映射方法。
在本发明实施的又一方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的脚本语言映射方法。
本发明实施例提供的脚本语言映射方法,通过当执行脚本文件中的目标函数时,确定与目标函数对应的调用函数,通过调用函数从通信栈获取目标函数的两个预设参数,并判断对象标识对应的对象是否实现与对象方法名对应的对象方法,若对象标识对应的对象未实现与对象方法名对应的对象方法,则禁止执行对象方法。也即即使当执行脚本文件中的目标函数时,不直接根据元表中的映射关系确定与目标函数对应的方法,而是确定调用函数,通过调用函数从通信栈的栈顶获取目标函数的两个预设参数,在判断出对象标识对应的对象未实现与对象方法名对应的对象方法的情况下,禁止执行对象方法,从而避免脚本文件执行失败以及应用程序运行异常的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明实施例中提供的一种脚本语言映射方法的步骤流程图;
图2为本发明实施例中提供的另一种脚本语言映射方法的步骤流程图;
图3为本发明实施例中提供的一种电子设备的结构示意图;
图4为本发明实施例中提供的另一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
参照图1,图1为本发明实施例中提供的一种脚本语言映射方法的步骤流程图。该方法包括如下步骤:
步骤101、当执行应用程序的脚本文件中的目标函数时,确定与目标函数对应的调用函数。
其中,脚本文件可以从服务器获取,脚本文件为通过脚本语言编写的,调用函数为通过编译语言编写的函数。
在需要对电子设备的应用程序的版本进行更新时,电子设备可以从服务器获取脚本文件,通过脚本文件对应用程序的版本进行更新。应用程序为采用编译语言编写的程序,编译语言例如为Objective-C语言,Objective-C语言简称OC语言,OC语言是一种通用、高级、面向对象的编程语言。脚本文件为采用脚本语言编写的文件,脚本语言例如为Lua脚本语言,Lua脚本语言为一种轻量级的脚本语言。
步骤102、通过调用函数从脚本语言与编译语言之间的通信栈获取目标函数的两个预设参数。
其中,两个预设参数包括目标函数对应的对象标识和对象标识对应的对象方法名。脚本语言和编译语言之间的相互调用和访问都需要通过通信栈进行。本实例中当执行Lua侧的目标函数以调用OC语言的函数时,需要将目标函数的参数读取出来放入通信栈中,再通过调用函数从通信栈中读取参数。参数包括两个预设参数或者包括两个预设参数和可选参数,本步骤中可以先获取两个预设参数。其中,可以从通信栈的栈顶开始,依次获取两个元素,获取的两个元素即为两个预设参数。为了维护通信栈,可以创建一个状态机实例,通过状态机实例维护通信栈,例如清理通信栈中不用的空间。
步骤103、判断对象标识对应的对象是否实现与对象方法名对应的对象方法。
需要说明的是,可以通过OC运行时定义的方法判断该对象是否实现了对象方法名对应的对象方法。其中,对象可以为实例对象,对象方法为实例方法;或者对象为类对象,对象方法为类方法。
步骤104、若对象标识对应的对象未实现与对象方法名对应的对象方法,则禁止执行对象方法。
现有技术中,如果服务器向安装了应用程序的旧版本的电子设备发送的脚本文件与旧版本不对应,例如,脚本文件中存在用于表示新类的新类符号和新类的新函数的新函数符号,但是电子设备的应用程序的旧版本中并未定义新类符号与旧版本中的某个类的映射关系,新函数符号与旧版本中的该类的方法的映射关系,则通信栈的元表中也不会存在这些映射关系,就会导致执行脚本文件中的新类的新函数时,在通信栈中无法找到OC中的与新类符号对应的类、以及与新函数符号对应的类的方法,找不到新函数符号对应的类的方法的情况下,就会报错,造成应用程序运行异常的问题。
由于现有技术中直接根据元表中的映射关系确定OC中的与目标函数对应的函数,如果执行脚本文件的新类的新函数,而OC中并未定义新类的新函数对应的函数,则会造成应用程序运行异常的问题。例如,现有技术中,在执行脚本文件中的某个类A的某个函数B以调用OC的类的方法时,需要将类A和函数B推入通信栈中,然后根据通信栈的元表中存储的脚本文件的类A和OC的类的映射关系、以及脚本文件中的函数B和OC中的方法的映射关系,确定调用OC中的与类A对应的类的方法(该方法与函数B具有映射关系),如果未确定到OC中与类A对应的类和/或与函数B对应的方法,则会导致脚本文件执行失败以及应用程序运行异常的问题。
而本实施例中,当执行脚本文件中的目标函数时,确定与目标函数对应的调用函数,通过调用函数从通信栈获取目标函数的两个预设参数,并判断对象标识对应的对象是否实现与对象方法名对应的对象方法,若对象标识对应的对象未实现与对象方法名对应的对象方法,则禁止执行对象方法。也即即使当执行脚本文件中的目标函数时,不直接根据元表中的映射关系确定与目标函数对应的方法,而是确定调用函数,通过调用函数从通信栈的栈顶获取目标函数的两个预设参数,在判断出对象标识对应的对象未实现与对象方法名对应的对象方法的情况下,禁止执行对象方法,从而避免脚本文件执行失败以及应用程序运行异常的问题。
参照图2,图2为本发明实施例中提供的另一种脚本语言映射方法的步骤流程图。该方法包括如下步骤:
步骤201、根据预设索引,确定通信栈的环境变量区。
例如,将特定的索引-10002指代该环境变量区。
步骤202、将采用脚本语言定义的第一函数和第二函数推入环境变量区,并建立第一函数与第一调用函数的第一映射关系、以及第二函数与第二调用函数的第二映射关系,并将第一映射关系和第二映射关系注册至环境变量区。
其中,第一函数用于调用通过编译语言编写的任意实例方法,第二函数用于调用通过编译语言编写的任意类方法。
例如,通过将第一函数在环境变量区中的名称指定为callInstanceMethod,将第二函数在环境变量区中的名称指定为callClassMethod以建立建立第一函数与第一调用函数的第一映射关系、以及第二函数与第二调用函数的第二映射关系。callInstanceMethod为第一调用函数的名称,callClassMethod为第二调用函数的名称。
步骤203、当执行应用程序的脚本文件中的目标函数时,根据环境变量区中注册的第一映射关系、以及第二映射关系,确定与目标函数对应的调用函数。
需要说明的是,当目标函数为第一函数时,根据环境变量区中注册的第一映射关系、以及第二映射关系,将第一调用函数作为与目标函数对应的调用函数;或者,
当目标函数为第二函数时,根据环境变量区中注册的第一映射关系、以及第二映射关系,将第二调用函数作为与目标函数对应的调用函数。
其中,在将第一调用函数作为与目标函数对应的调用函数的情况下,对象标识为实例对象标识,对象方法名为实例方法名;或者,
在将第二调用函数作为与目标函数对应的调用函数的情况下,对象标识为类对象标识,对象方法名为类方法名。
步骤204、通过调用函数从脚本语言与编译语言之间的通信栈获取目标函数的两个预设参数。
需要说明的是,当调用函数为第一调用函数时,两个预设参数包括实例对象标识和实例方法名,即通过第一调用函数获取实例对象标识和实例方法名,其中,实例对象标识为实例对象的对象地址。当调用函数为第二调用函数时,两个预设参数包括类对象标识和类方法名,即通过第二调用函数获取类对象标识和类方法名,其中,类对象标识可以为类名。
步骤205、判断对象标识对应的对象是否实现与对象方法名对应的对象方法。
当通过第一调用函数获取实例对象标识和实例方法名时,则本步骤中判断实例对象是否实现了与实施方法名对应的实例方法;当通过第二调用函数获取类对象标识和类方法名时,则本步骤中判断类对象是否实现了与类方法名对应的类方法。具体的,可以通过OC运行时定义的respondsToSelector方法,判断对象标识对应的对象是否实现与对象方法名对应的对象方法。
需要说明的是,当通过第二调用函数获取类对象标识和类方法名时,可以通过OC的NSClassFromString获取到此特殊对象,再通过OC运行时定义的respondsToSelector方法判断类对象是否实现与该类方法。
若对象标识对应的对象未实现与对象方法名对应的对象方法,则执行步骤206;若对象标识对应的对象实现了与对象方法名对应的对象方法,则执行步骤207。
步骤206、禁止执行对象方法。
步骤207、根据对象标识和对象方法名,创建与对象方法名对应的方法签名。
如果在步骤205中,判断实例对象是否实现了与实施方法名对应的实例方法,则在本步骤中需要根据实例对象标识和实例方法名,创建与实例方法名对应的方法签名。如果在步骤205中,判断类对象是否实现了与类方法名对应的类方法,则在本步骤中需要根据类对象标识和类方法名,创建与类方法名对应的方法签名。
步骤208、判断通信栈中是否存在目标函数的剩余参数,其中,剩余参数为目标函数的除两个预设参数之外的参数。
其中,剩余参数的类型包括整形、字符串、字典以及对象类型中的至少一种,对象类型为实例对象类型或类对象类型。剩余参数为可选参数。
需要说明的是,第一函数可以接受2个至N个参数,N为大于2的整数。例如,第一函数接受4个参数,参数1为对象地址,参数2为实例方法名,参数3和参数4为可选参数,可选参数可以支持整形、字符串、字典这三类Lua脚本语言的标准数据格式,以及实例对象类型和类对象类型。也即目标函数为第一函数时,目标函数可以接受的参数包括参数1:对象地址、参数2:实例方法名、参数3、参数4、…、参数N。
第二函数可以接受从2到N个参数。例如,第二函数接受4个参数,参数1为类名,参数2为类方法名,参数3和参数4为可选参数,可选参数可以支持整形、字符串、字典这三类Lua脚本的语言的标准数据格式,及实例对象类型和类对象类型。也即目标函数为第二函数时,目标函数可以接受的参数包括参数1:类名、参数2:类方法名、参数3、参数4、…、参数N。
步骤209、若存在剩余参数,则从通信栈中取出剩余参数,并根据方法签名,转换剩余参数的类型。
其中,根据方法签名,转换剩余参数的类型可以通过如下步骤实现:
根据所述方法签名,确定所述剩余参数中的每个参数的类型;
将目标参数转换成与所述目标参数的类型相同的参数,其中,所述目标参数见为所述每个参数中的任意一个。
例如,剩余参数的第一个参数的类型为整数,则将第一个参数转换成整数类型的参数;第二参数的类型为字符,则将第二参数转换成字符类型的参数。将目标参数转换成与所述目标参数的类型相同的参数后,OC语言才能识别出参数,并执行步骤210。
步骤210、根据类型转换后的剩余参数执行方法签名对应的方法。
执行步骤210后,如果有返回值,则将返回值推入通信栈,以供Lua语言读取返回值。
需要说明的是,现有技术中,如果应用程序的新版本比旧版本中多定义了一个新类的新方法,电子设备1上安装的为应用程序的新版本,电子设备2上安装的为应用程序的旧版本,而服务器向这两个电子设备下发相同的脚本文件1。如果旧版中定义了类A与脚本文件1中的用于表示类的符号11的映射关系1、类A的方法与脚本文件1中的符号12的映射关系2;定义了类B与脚本文件1中的用于表示类的符号21的映射关系3、类B的方法与脚本文件1中的符号12的映射关系4;新版本中增加了类C和类C的方法,但是并未声明类C与脚本文件1中的用于表示类的符号31之间的映射关系5、也并未声明类C的方法与脚本文件1中的用于表示新函数的新函数符号32之间的映射关系6,通信栈的元表中也并未存储该映射关系5和映射关系6,因此新版本中的新类和新方法(类C为新类,类C的方法为新方法)无法对应元表中的映射关系,电子设备1在执行脚本文件1时,如果执行到符号31,则无法从元表中获取与符号31具有映射关系的类,导致执行脚本文件1失败。如果要保证电子设备1正常执行脚本文件1,则需要在新版本中声明映射关系5和映射关系6,并将该映射关系5和映射关系6注册至元表中。
对于电子设备2在执行脚本文件1时,如果执行到符号31,则无法从元表中获取与符号31具有映射关系的类,导致执行脚本文件1失败。如果向电子设备2下发脚本文件2,脚本文件2中不包括符号31和符号32,则可以保证脚本文件2正常执行。其中,脚本文件1中的符号31相对于脚本文件2中的符号11和符号21而言,符号31为脚本文件1中的用于表示新类的新类符号,符号32为脚本文件1中的用于表示新类的新函数的新函数符号。
因此,综上,需要服务器区分应用程序的版本,针对不同的版本下发对应的脚本文件,造成服务器逻辑复杂的问题,同时需要新版本中增加新类或新方法时,需要声明新类或新方法与脚本文件中的符号的映射关系,并将映射关系注册至通信栈,因此比较耗时耗力。
而本实施例中,当执行应用程序的脚本文件中的目标函数时,根据环境变量区注册的第一映射关系、以及第二映射关系,确定与目标函数对应的调用函数,通过调用函数从脚本语言与编译语言之间的通信栈的栈顶获取目标函数的两个预设参数,判断对象标识对应的对象是否实现与对象方法名对应的对象方法,不需要服务器下发不同的脚本文件,若对象标识对应的对象未实现与对象方法名对应的对象方法,则禁止执行所述对象方法。由于在执行脚本文件时,执行通过调用函数读取目标函数的两个预设参数,再判断对象标识对应的对象是否实现与对象方法名对应的对象方法,如果未实现则禁止执行所述对象方法,不会造成脚本文件执行失败的问题,从而不会导致应用程序运行异常的问题,从而无需服务器区分电子设备的版本下发脚本文件。同时也不需要在新版本中增加新类或新方法时,声明新类或新方法与脚本文件中的符号的映射关系,并将映射关系注册至通信栈,因此适用于快速开发以及快速上线的需求。
参照图3,图3为本发明实施例中提供的一种电子设备的结构示意图。该电子设备300可以包括如下模块:
第一确定模块310,用于当执行应用程序的脚本文件中的目标函数时,确定与所述目标函数对应的调用函数,其中,所述脚本文件为通过脚本语言编写的,所述调用函数为通过所述编译语言编写的函数;
获取模块320,用于通过所述调用函数从所述脚本语言与所述编译语言之间的通信栈获取所述目标函数的两个预设参数,其中,所述两个预设参数包括所述目标函数对应的对象标识和所述对象标识对应的对象方法名;
第一判断模块330,用于判断所述对象标识对应的对象是否实现与所述对象方法名对应的对象方法;
所述第一判断模块330,还用于若所述对象标识对应的对象未实现与所述对象方法名对应的对象方法,则禁止执行所述对象方法。
本实施例提供的电子设备,通过当执行所述脚本文件中的目标函数时,确定与所述目标函数对应的调用函数,通过所述调用函数从通信栈的栈顶获取所述目标函数的两个预设参数,并判断所述对象标识对应的对象是否实现与所述对象方法名对应的对象方法,若所述对象标识对应的对象未实现与所述对象方法名对应的对象方法,则禁止执行所述对象方法。也即即使当执行所述脚本文件中的目标函数时,不直接根据元表中的映射关系确定与目标函数对应的方法,而是确定调用函数,通过调用函数从通信栈的栈顶获取所述目标函数的两个预设参数,在判断出所述对象标识对应的对象未实现与所述对象方法名对应的对象方法的情况下,禁止执行所述对象方法,从而避免脚本文件执行失败以及应用程序运行异常的问题。
可选的,所述调用函数包括第一调用函数和所述第二调用函数中的任意一种,还包括:
第二确定模块,用于根据预设索引,确定所述通信栈的环境变量区;
注册模块,用于将采用所述脚本语言定义的第一函数和第二函数推入所述环境变量区,并建立所述第一函数与所述第一调用函数的第一映射关系、以及所述第二函数与所述第二调用函数的第二映射关系,并将所述第一映射关系和所述第二映射关系注册至所述环境变量区,其中,所述第一函数用于调用通过所述编译语言编写的任意实例方法,所述第二函数用于调用通过所述编译语言编写的任意类方法;
所述第一确定模块310,具体用于当执行所述应用程序的脚本文件中的目标函数时,根据所述环境变量区中注册的所述第一映射关系、以及所述第二映射关系,确定与所述目标函数对应的调用函数。
可选的,所述第一确定模块,310具体用于当所述目标函数为所述第一函数时,根据所述环境变量区中注册的所述第一映射关系、以及所述第二映射关系,将所述第一调用函数作为与所述目标函数对应的调用函数;或者,
当所述目标函数为所述第二函数时,根据所述环境变量区中注册的所述第一映射关系、以及所述第二映射关系,将所述第二调用函数作为与所述目标函数对应的调用函数。
可选的,在将所述第一调用函数作为与所述目标函数对应的调用函数的情况下,所述对象标识为实例对象标识,所述对象方法名为实例方法名;或者,
在将所述第二调用函数作为与所述目标函数对应的调用函数的情况下,所述对象标识为类对象标识,所述对象方法名为类方法名。
可选的,还包括:
创建模块,用于若所述对象标识对应的对象实现了与所述对象方法名对应的对象方法,则根据所述对象标识和所述对象方法名,创建与对象方法名对应的方法签名;
第二判断模块,用于根据所述方法签名,判断所述通信栈中是否存在所述目标函数的剩余参数,其中,所述剩余参数为所述目标函数的除所述两个预设参数之外的参数;
转换模块,用于若存在所述剩余参数,则从通信栈中取出所述剩余参数,并根据所述方法签名,转换所述剩余参数的类型;
执行模块,用于根据类型转换后的剩余参数执行所述方法签名对应的方法。
可选的,所述转换模块,具体用于根据所述方法签名,确定所述剩余参数中的每个参数的类型;将目标参数转换成与所述目标参数的类型相同的参数,其中,所述目标参数见为所述每个参数中的任意一个。
可选的,所述剩余参数的类型包括整形、字符串、字典以及对象类型中的至少一种,所述对象类型为实例对象类型或类对象类型。
本发明实施例还提供了一种电子设备,如图4所示,图4为本发明实施例中提供的另一种电子设备的结构示意图。包括处理器401、通信接口402、存储器403和通信总线404,其中,处理器401,通信接口402,存储器403通过通信总线404完成相互间的通信,
存储器403,用于存放计算机程序;
处理器401,用于执行存储器403上所存放的程序时,实现如下步骤:
当执行应用程序的脚本文件中的目标函数时,确定与所述目标函数对应的调用函数,其中,所述脚本文件为从服务器获取的,所述脚本文件为通过脚本语言编写的,所述调用函数为通过所述编译语言编写的函数;
通过所述调用函数从所述脚本语言与所述编译语言之间的通信栈的栈顶获取所述目标函数的两个预设参数,其中,所述两个预设参数包括所述目标函数对应的对象标识和所述对象标识对应的对象方法名;
判断所述对象标识对应的对象是否实现与所述对象方法名对应的对象方法;
若所述对象标识对应的对象未实现与所述对象方法名对应的对象方法,则禁止执行所述对象方法。
上述终端提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述终端与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的脚本语言映射方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的脚本语言映射方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘SolidState Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (16)
1.一种脚本语言映射方法,其特征在于,执行于电子设备,包括:
当执行应用程序的脚本文件中的目标函数时,确定与所述目标函数对应的调用函数,其中,所述脚本文件为通过脚本语言编写的,所述调用函数为通过编译语言编写的函数;
通过所述调用函数从所述脚本语言与所述编译语言之间的通信栈获取所述目标函数的两个预设参数,其中,所述两个预设参数包括所述目标函数对应的对象标识和所述对象标识对应的对象方法名;
判断所述对象标识对应的对象是否实现与所述对象方法名对应的对象方法;
若所述对象标识对应的对象未实现与所述对象方法名对应的对象方法,则禁止执行所述对象方法。
2.根据权利要求1所述的方法,其特征在于,所述调用函数包括第一调用函数和第二调用函数中的任意一种,在所述当执行应用程序的脚本文件中的目标函数时,确定与所述目标函数对应的调用函数之前,还包括:
根据预设索引,确定所述通信栈的环境变量区;
将采用所述脚本语言定义的第一函数和第二函数推入所述环境变量区,并建立所述第一函数与所述第一调用函数的第一映射关系、以及所述第二函数与所述第二调用函数的第二映射关系,并将所述第一映射关系和所述第二映射关系注册至所述环境变量区,其中,所述第一函数用于调用通过所述编译语言编写的任意实例方法,所述第二函数用于调用通过所述编译语言编写的任意类方法;
所述当执行应用程序的脚本文件中的目标函数时,确定与所述目标函数对应的调用函数,包括:
当执行所述应用程序的脚本文件中的目标函数时,根据所述环境变量区中注册的所述第一映射关系、以及所述第二映射关系,确定与所述目标函数对应的调用函数。
3.根据权利要求2所述的方法,其特征在于,所述当执行所述目标函数时,根据所述环境变量区中注册的所述第一映射关系、以及所述第二映射关系,确定与所述目标函数对应的调用函数,包括:
当所述目标函数为所述第一函数时,根据所述环境变量区中注册的所述第一映射关系、以及所述第二映射关系,将所述第一调用函数作为与所述目标函数对应的调用函数;或者,
当所述目标函数为所述第二函数时,根据所述环境变量区中注册的所述第一映射关系、以及所述第二映射关系,将所述第二调用函数作为与所述目标函数对应的调用函数。
4.根据权利要求3所述的方法,其特征在于,在将所述第一调用函数作为与所述目标函数对应的调用函数的情况下,所述对象标识为实例对象标识,所述对象方法名为实例方法名;或者,
在将所述第二调用函数作为与所述目标函数对应的调用函数的情况下,所述对象标识为类对象标识,所述对象方法名为类方法名。
5.根据权利要求2或3所述的方法,其特征在于,还包括:
若所述对象标识对应的对象实现了与所述对象方法名对应的对象方法,则根据所述对象标识和所述对象方法名,创建与对象方法名对应的方法签名;
判断所述通信栈中是否存在所述目标函数的剩余参数,其中,所述剩余参数为所述目标函数的除所述两个预设参数之外的参数;
若存在所述剩余参数,则从通信栈中取出所述剩余参数,并根据所述方法签名,转换所述剩余参数的类型;
根据类型转换后的剩余参数执行所述方法签名对应的方法。
6.根据权利要求5所述的方法,其特征在于,所述根据所述方法签名,转换所述剩余参数的类型,包括:
根据所述方法签名,确定所述剩余参数中的每个参数的类型;
将目标参数转换成与所述目标参数的类型相同的参数,其中,所述目标参数见为所述每个参数中的任意一个。
7.根据权利要求5或6所述的方法,其特征在于,所述剩余参数的类型包括整形、字符串、字典以及对象类型中的至少一种,所述对象类型为实例对象类型或类对象类型。
8.一种电子设备,其特征在于,包括:
第一确定模块,用于当执行应用程序的脚本文件中的目标函数时,确定与所述目标函数对应的调用函数,其中,所述脚本文件为通过脚本语言编写的,所述调用函数为通过编译语言编写的函数;
获取模块,用于通过所述调用函数从所述脚本语言与所述编译语言之间的通信栈获取所述目标函数的两个预设参数,其中,所述两个预设参数包括所述目标函数对应的对象标识和所述对象标识对应的对象方法名;
第一判断模块,用于判断所述对象标识对应的对象是否实现与所述对象方法名对应的对象方法;
所述第一判断模块,还用于若所述对象标识对应的对象未实现与所述对象方法名对应的对象方法,则禁止执行所述对象方法。
9.根据权利要求8所述的设备,其特征在于,所述调用函数包括第一调用函数和第二调用函数中的任意一种,还包括:
第二确定模块,用于根据预设索引,确定所述通信栈的环境变量区;
注册模块,用于将采用所述脚本语言定义的第一函数和第二函数推入所述环境变量区,并建立所述第一函数与所述第一调用函数的第一映射关系、以及所述第二函数与所述第二调用函数的第二映射关系,并将所述第一映射关系和所述第二映射关系注册至所述环境变量区,其中,所述第一函数用于调用通过所述编译语言编写的任意实例方法,所述第二函数用于调用通过所述编译语言编写的任意类方法;
所述第一确定模块,具体用于当执行所述应用程序的脚本文件中的目标函数时,根据所述环境变量区注册的所述第一映射关系、以及所述第二映射关系,确定与所述目标函数对应的调用函数。
10.根据权利要求9所述的设备,其特征在于,所述第一确定模块,具体用于当所述目标函数为所述第一函数时,根据所述环境变量区中注册的所述第一映射关系、以及所述第二映射关系,将所述第一调用函数作为与所述目标函数对应的调用函数;或者,
当所述目标函数为所述第二函数时,根据所述环境变量区中注册的所述第一映射关系、以及所述第二映射关系,将所述第二调用函数作为与所述目标函数对应的调用函数。
11.根据权利要求10所述的设备,其特征在于,在将所述第一调用函数作为与所述目标函数对应的调用函数的情况下,所述对象标识为实例对象标识,所述对象方法名为实例方法名;或者,
在将所述第二调用函数作为与所述目标函数对应的调用函数的情况下,所述对象标识为类对象标识,所述对象方法名为类方法名。
12.根据权利要求9或10所述的设备,其特征在于,还包括:
创建模块,用于若所述对象标识对应的对象实现了与所述对象方法名对应的对象方法,则根据所述对象标识和所述对象方法名,创建与对象方法名对应的方法签名;
第二判断模块,用于判断所述通信栈中是否存在所述目标函数的剩余参数,其中,所述剩余参数为所述目标函数的除所述两个预设参数之外的参数;
转换模块,用于若存在所述剩余参数,则从通信栈中取出所述剩余参数,并根据所述方法签名,转换所述剩余参数的类型;
执行模块,用于根据类型转换后的剩余参数执行所述方法签名对应的方法。
13.根据权利要求12所述的设备,其特征在于,所述转换模块,具体用于根据所述方法签名,确定所述剩余参数中的每个参数的类型;将目标参数转换成与所述目标参数的类型相同的参数,其中,所述目标参数见为所述每个参数中的任意一个。
14.根据权利要求12或13所述的设备,其特征在于,所述剩余参数的类型包括整形、字符串、字典以及对象类型中的至少一种,所述对象类型为实例对象类型或类对象类型。
15.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-7任一所述的方法步骤。
16.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010545053.7A CN111736847B (zh) | 2020-06-15 | 2020-06-15 | 脚本语言映射方法、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010545053.7A CN111736847B (zh) | 2020-06-15 | 2020-06-15 | 脚本语言映射方法、电子设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111736847A CN111736847A (zh) | 2020-10-02 |
CN111736847B true CN111736847B (zh) | 2023-07-18 |
Family
ID=72649240
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010545053.7A Active CN111736847B (zh) | 2020-06-15 | 2020-06-15 | 脚本语言映射方法、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111736847B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016135729A1 (en) * | 2015-02-26 | 2016-09-01 | Israel Zimmerman | A method to identify known compilers functions, libraries and objects inside files and data items containing an executable code |
CN109814911A (zh) * | 2018-12-14 | 2019-05-28 | 深圳壹账通智能科技有限公司 | 用于管理脚本程序的方法、装置、计算机设备及存储介质 |
CN110389899A (zh) * | 2019-06-21 | 2019-10-29 | 北京字节跳动网络技术有限公司 | 检测js程序的api数据类型的方法装置、介质和设备 |
CN110837391A (zh) * | 2019-11-04 | 2020-02-25 | 广州华多网络科技有限公司 | 应用程序的热更新方法及装置、存储介质及电子设备 |
CN110874213A (zh) * | 2019-11-12 | 2020-03-10 | 广州银汉科技有限公司 | 一静态强类型语言的运行时类型扩展与反射方法 |
CN111061468A (zh) * | 2019-12-20 | 2020-04-24 | 北京爱奇艺科技有限公司 | 一种映射方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7283993B2 (en) * | 2004-04-29 | 2007-10-16 | International Business Machines Corporation | Methods, systems, and media for handling errors in script files |
JP4912452B2 (ja) * | 2009-11-27 | 2012-04-11 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 動的型付け言語で記述されたソースコードを静的型付け言語で記述されたターゲットコードに変換し、実行する方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム |
US9594545B2 (en) * | 2013-06-05 | 2017-03-14 | Splunk Inc. | System for displaying notification dependencies between component instances |
-
2020
- 2020-06-15 CN CN202010545053.7A patent/CN111736847B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016135729A1 (en) * | 2015-02-26 | 2016-09-01 | Israel Zimmerman | A method to identify known compilers functions, libraries and objects inside files and data items containing an executable code |
CN109814911A (zh) * | 2018-12-14 | 2019-05-28 | 深圳壹账通智能科技有限公司 | 用于管理脚本程序的方法、装置、计算机设备及存储介质 |
CN110389899A (zh) * | 2019-06-21 | 2019-10-29 | 北京字节跳动网络技术有限公司 | 检测js程序的api数据类型的方法装置、介质和设备 |
CN110837391A (zh) * | 2019-11-04 | 2020-02-25 | 广州华多网络科技有限公司 | 应用程序的热更新方法及装置、存储介质及电子设备 |
CN110874213A (zh) * | 2019-11-12 | 2020-03-10 | 广州银汉科技有限公司 | 一静态强类型语言的运行时类型扩展与反射方法 |
CN111061468A (zh) * | 2019-12-20 | 2020-04-24 | 北京爱奇艺科技有限公司 | 一种映射方法及装置 |
Non-Patent Citations (1)
Title |
---|
Android系统中恶意代码的动态检测技术研究;李博亚;薛质;;上海师范大学学报(自然科学版)(01);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111736847A (zh) | 2020-10-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106407111B (zh) | 终端测试装置、终端测试设备及变量维护方法 | |
CN114048701B (zh) | 网表eco方法、装置、设备及可读存储介质 | |
CN111124480B (zh) | 应用程序包的生成方法、装置、电子设备及存储介质 | |
CN111443920B (zh) | 一种框架迁移方法及装置 | |
CN104461531A (zh) | 一种报表系统自定义函数的实现方法 | |
CN111124479A (zh) | 配置文件的解析方法、系统及电子设备 | |
CN111984264B (zh) | 一种静态库的生成方法和装置 | |
CN115292197A (zh) | 一种软件测试方法、装置、电子设备及存储介质 | |
CN116415258A (zh) | 漏洞检测方法、装置、设备、介质及程序产品 | |
CN110209983B (zh) | 一种网页web项目的部署方法及装置 | |
CN112416612A (zh) | 服务调用方法、装置、计算机设备和可读存储介质 | |
CN113111669B (zh) | 基于增量的前端多语言国际化翻译方法及装置 | |
CN111767213B (zh) | 数据库检查点的测试方法、装置、电子设备及存储介质 | |
CN111399842B (zh) | 一种代码编译方法及装置 | |
CN111736847B (zh) | 脚本语言映射方法、电子设备及可读存储介质 | |
CN110516258B (zh) | 数据校验方法及装置、存储介质、电子装置 | |
CN116185492A (zh) | 多平台sdk构建方法、装置、设备、系统及计算机可读介质 | |
CN111444456B (zh) | 一种样式编辑方法、装置及电子设备 | |
CN108595292A (zh) | 一种系统的优化方法、移动终端及计算机存储介质 | |
CN114201399A (zh) | 程序变更的影响范围识别方法、装置、设备及存储介质 | |
CN111736848B (zh) | 包冲突定位方法、装置、电子设备及可读存储介质 | |
CN111552638B (zh) | 一种代码检测方法及装置 | |
CN114115933A (zh) | 软件升级的方法、系统、装置、电子设备及介质 | |
CN112965697A (zh) | 一种代码文件的生成方法、装置及电子设备 | |
CN112130860A (zh) | Json对象解析方法、装置、电子设备及存储介质 |
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 |