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. MATLAB - 练习程序,求灰度图像均值、最大、最小数值

    clear all; close all; clc img=imread('lena.bmp'); figure; imshow(uint8(img)); [m n]=size(img); img_m ...

  2. poj 2584 T-Shirt Gumbo (二分匹配)

    T-Shirt Gumbo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2571   Accepted: 1202 Des ...

  3. 使用Aspose插件将程序中的表格,导出生成excel表格

    http://www.cnblogs.com/lanyue52011/p/3372452.html这个是原文地址 /// <summary> /// 点击按钮,将内存表导出excel表格! ...

  4. Java 基础知识总结 (四、String)

    四.String public final class String extends Object implements Serializable, Comparable<String>, ...

  5. HDU 1540 Tunnel Warfare(线段树+区间合并)

    http://acm.hdu.edu.cn/showproblem.php?pid=1540 题目大意:抗日战争期间进行地道战,存在n个村庄用地道连接,输入D表示破坏某个村庄(摧毁与其相连的地道, 包 ...

  6. 修改navigationbar右侧按钮离屏幕边缘位置

    先上代码 UIButton *settingBtn = [Utils creatCustomButtonWithFrame:CGRectMake(, , , ) btnTitle: titleColo ...

  7. 【随笔】vmstat性能监测

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况.相比top,vmstat可以看到整个机 ...

  8. XE3随笔11:Merge、Clone、ForcePath

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  9. iOS删除本地文件

    以前在博客里记录的东西都是截屏,没有插入代码,今天进去一看,图片都不显示了,只好重新插入代码,发现以前写的文件操作这块,没有写本地文件删除这个功能,重新再记录一下 //需要删除文件的物理地址 NSSt ...

  10. 【区间dp】codevs1966 乘法游戏

    f(i,j)=min{f(i,k)+f(k,j)+a[i]*a[k]*a[j]}(1<=i<=j<=n,i<k<j) #include<cstdio> #in ...