zoukankan      html  css  js  c++  java
  • paip.编程语言方法重载实现的原理及python,php,js中实现方法重载

    paip.编程语言方法重载实现的原理及python,php,js中实现方法重载

    有些语言,在方法的重载上,形式上不支持函数重载,但可以通过模拟实现。。
    主要原理:根据参数个数进行重载,或者使用默认值 ,或者根据参数类型重载


    对于静态语言java ,c++来说, 形式上就可以实现函数重载
    对于动态语言,python,php,js 形式上不支持函数重载,可根据参数个数进行模拟。。  也可模拟根据参数类型重载模拟


    作者Attilax 艾龙,  EMAIL:1466519819@qq.com
    来源:老哇的爪子 Attilax
    地址:http://blog.csdn.net/attilax

    ==========php中的方法重载
    ***
    在php中实现重载,主要通过魔术方法 __call 实现。也可通过参数个数进行重载
    __call 会自动获得两个参数,第一个参数代表要求调用的函数名,第二个参数代表由实参组成的数组。
    ***/

    __call 实际上还是使用根据参数个数进行重载的...
    重载的例子我写了个,你参考一下
        function overloadTest(){
            $name = "overload".func_num_args();
            $name();
        }
        function overload0(){
            echo 'overload0';
        }
        function overload1(){
            echo 'overload1';
        }
        function overload2(){
            echo 'overload2';
        }
        overloadTest();                  //overload0
        overloadTest(1);                //overload1
        overloadTest(1,1);             //overload2


    ====================js中 当一个作用域中同时定义两个相同的方法名时不会报错。但真正使用的是后一个函数
     要实现重载,原来的方法改名,不个调用的方法放得个最后.
      function createTab_1(tabname)

        function createTab(tabname,taburl) {
                    if(arguments.length==1){
                    createTab_1(tabname);
                    }


    ================python中的重载
    用python实现:
    f(str,times=1)
    print str*times
    打印一次就调用f(str),打印多次就调用f(str,times),调用方法一样。
    从形式上先,与C++相比,代码省了很多,但功能是一样的。times=1表示参数没有指定时,默认情况下的值为1

    默认值就是python用来实现函数重载的重要方法。



    参考
    php中实现方法重载: - Owl Base的日志 - 网易博客.htm
  • 相关阅读:
    523. Continuous Subarray Sum
    517. Super Washing Machines
    516. Longest Palindromic Subsequence
    486. Predict the Winner
    467. Unique Substrings in Wraparound String
    474. Ones and Zeroes
    语法小结
    互评作业:使用数组
    466. Count The Repetitions
    1052 卖个萌 (20 分)
  • 原文地址:https://www.cnblogs.com/attilax/p/5964043.html
Copyright © 2011-2022 走看看