• [转]ActionScript为什么不支持函数重载


    照我的理解,函数重载(Function Override)从来不是面向对象语言的核心。因此,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语言的内部设计实现有关。我们给出几个重要的概念,有助于理解上述问题。

  • 相关阅读:
    luogu P1382 楼房
    luogu P1908 逆序对
    5.28 模拟赛
    POJ 2991 Crane
    残(矩阵快速幂)
    AC日记——拍照 洛谷 P3410
    AC日记——[CQOI2014]危桥 洛谷 P3163
    AC日记——【模板】二分图匹配 洛谷 P3386
    AC日记——[ZJOI2009]假期的宿舍 cogs 1333
    AC日记——城市 洛谷 P1401
  • 原文地址:https://www.cnblogs.com/wxxweb/p/2016580.html
Copyright © 2020-2023  润新知