[转]ActionScript为什么不支持函数重载
照我的理解,函数重载(Function Override)从来不是面向对象语言的核心。因此,ActionScript语言是否支持函数重载不应该成为人们批评或质疑它的原因之一,是否实现函数重载完全取决于你的应用。
曾经遇到一个问题,Java语言的某个类接口要映射要ActionScript类,由于该类的接口有函数重载的现象,导致ActionScript无法声明相应的接口。例如:
曾经遇到一个问题,Java语言的某个类接口要映射要ActionScript类,由于该类的接口有函数重载的现象,导致ActionScript无法声明相应的接口。例如:
//Java类 interface PetStoreFacade{ Account getAccount(String username); Account getAccount(String username, String password); //... } |
//ActionScript类 interface PetStoreFacade{ function getAccount(username: String ):Account; function getAccount(username: String , password: String ):Account; //ERROR,ActionScript不支持 } |
从此例,大家可以看出,讨论ActionScript是否支持函数重载的来源了(这大概是其中之一,即与支持函数重载的语言配合工作,或者要从支持函数重载的语言迁移到ActionScript就可能会遇到函数重载的问题)。
关于ActionScript支持函数重载的文章很多,通过ActionScript提供的语言机制和变通的手法,可以让ActionScript支持函数重载。示例如下:
class PetStoreFacadeImpl{ function getAccount(obj:*):Account { if (arguments.length== 1 ) { if (arguments[ 0 ] typeof 'String' ) { //do getAccount(username:String) } } else if (arguments.length== 2 ) { if (arguments[ 0 ] typeof 'String' && arguments[ 1 ] typeof 'String' ){ //do getAccount(username:String,password:String) } } } } |
通过arguments的判断比较,实现了函数重载,只需调用时传入合适的参数即可。不过我们仍然要问,为什么ActionScript不能直接支持函数重载。语言内部的实现机制是怎么样的?仔细查阅了一些资料之后,发现这个问题其实很简单。原来,这跟ActionScript语言的内部设计实现有关。我们给出几个重要的概念,有助于理解上述问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?