多分派

维基百科,自由的百科全书
跳到导航 跳到搜索

多分派(Multiple dispatch or multimethods)是某些面向对象编程语言的特性,函数或者方法的分派取决于运行时参数的对象类型。它是对方法调用只能由调用者决定的单分派的扩展。多分派概括了两个或多个对象的动态分派。

理解分派[编辑]

软件工程师通常把代码写进代码块中,代码块通常称作过程,函数,方法。代码通过被调用来执行,调用时将控制权传入函数中,当函数执行完成后将控制权返回给调用者。

函数名通常用来描述函数的目的。有时会将多个函数起同样的名称。比如同名函数在逻辑上处理相同的任务,但是操作在不同类型的输入值上。在这种情况下,无法单单通过函数名来判断目标代码块。那么,函数参数的个数和类型也就被用来判断。

通常,单分派面向对象语言,在调用一个方法时,方法参数中一个参数会被特殊对待并用来决定哪一个方法(如果有多个同名方法)会被调用。在许多语言中,这个特殊的参数是在语法上指明的,许多编程语言在调用方法时把特殊参数放在小圆点(.)之前。例如special.method(other,arguments,here),这样lion.call()将会发出狮吼,同时sparrow.call()只会吱吱地叫。

相反,在实现了多分派的语言中,被调用的函数即是那些参数个数一样多并且类型也匹配的调用。在调用中并没有特殊参数来决定那个方法被调用。

Common Lisp Object System (CLOS)是早期和著名的多分派语言。

数据类型[编辑]

编译时就可以区分出类型的编程语言,分派发生在编译时。这种编译时期的发生的选择通常被叫做方法重载。

在有些编程语言中,这种数据类型的区分可以被延后到运行时,例如后绑定(late binding)。分派发生在运行时并依据运行时方法的参数类型,这种方式的分派通常也被称为多方法(multimethods)。