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

paip.编程语言方法重载实现的原理及python,php,js中实现方法重载的更多相关文章

  1. paip.提升效率--数据绑定到table原理和流程Angular js jquery实现

    paip.提升效率--数据绑定到table原理和流程Angular js  jquery实现 html #--keyword 1 #---原理和流程 1 #----jq实现的代码 1 #-----An ...

  2. 【转载】JS中bind方法与函数柯里化

    原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情 ...

  3. 原生JS中apply()方法的一个值得注意的用法

    今天在学习vue.js的render时,遇到需要重复构造多个同类型对象的问题,在这里发现原生JS中apply()方法的一个特殊的用法: var ary = Array.apply(null, { &q ...

  4. js中apply方法的使用

    js中apply方法的使用   1.对象的继承,一般的做法是复制:Object.extend prototype.js的实现方式是: Object.extend = function(destinat ...

  5. js中settimeout方法加参数

    js中settimeout方法加参数的使用. 简单使用看w3school  里面没有参数调用,  例子: <script type="text/javascript"> ...

  6. js中split()方法得到的数组长度

    js 中split(",")方法通过 ”,“ 分割字符串, 如果字符串中没有 “,” , 返回的是字符串本身 var str = “abc”://分隔符个数为0 var newSt ...

  7. 关于JS中的方法是否加括号的问题

    js中的方法什么时候加括号什么时候不加括号呢,我们有时候经常就搞不清楚,记住下面这几点就好理解了. 1.函数做参数时都不要加括号. function fun(a){ alert(a); } funct ...

  8. js中的方法如何传入多个参数

    js中的方法如何传入多个参数 $(function () { let parameter1 = 1; let parameter2 = 'Hello World'; let parameter3 = ...

  9. js 中的方法注入(aop)

    js 中的方法注入 java中很多框架支持 apo 的注入, js中也可以类似的进行实现 主要是通过扩展js中方法的老祖 Function 对象来进行实现. Function.prototype.af ...

随机推荐

  1. [2015hdu多校联赛补题]hdu5348 MZL's endless loop

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5348 题意:给你一个无向图,要你将无向图的边变成有向边,使得得到的图,出度和入度差的绝对值小于等于1, ...

  2. 51单片机ALE引脚的控制(摘录)

    ALE/PROG: 当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节. 在FLASH编程期间,此引脚用于输入编程脉冲. 在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频 ...

  3. 在Windows上运行Tomcat

    一.下载jdk 百度搜索jdk 64位 下载,直接就有链接.或者官网下载 二.下载tomcat http://tomcat.apache.org/ 三.安装jdk并配置环境 安装jdk后进入控制面板- ...

  4. Cable master poj1064(二分)

    http://poj.org/problem?id=1064 题意:共有n段绳子,要求总共被分为k段.问在符合题意的前提下,每段长最大是多少? #include <iostream> #i ...

  5. Train Problem I hdu 1022(栈)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=1022 题意:给出火车的进站与出站顺序,判断是否可以按照给出的出站顺序出站. #include < ...

  6. PHP 四种基本排序算法的代码实现

    前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序. $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思 ...

  7. mfc中CString转化为string的方法

    LL(1)分析法实验的mfc做到最后因为CString转化为string的问题卡了一个多小时,也是惨,网上各种方法找过都不行.幸亏最后还是找到几行代码搞定了.特此mark一下. USES_CONVER ...

  8. vim 分屏

    分屏启动Vim 使用大写的O参数来垂直分屏. vim -On file1 file2 ... 使用小写的o参数来水平分屏. vim -on file1 file2 ... 注释: n是数字,表示分成几 ...

  9. autoresizingMask的用法

    UIViewAutoresizingNone = , UIViewAutoresizingFlexibleLeftMargin = << , UIViewAutoresizingFlexi ...

  10. 纵表、横表互转的SQL

    纵表.横表互转的SQL By:大志若愚 1.建表: 纵表结构 Table_A  create table Table_A ( 姓名 ), 课程 ), 成绩 int ) ) ) ) ) ) 姓名 课程 ...