多分派

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

理解分派

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

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

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

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

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

数据类型

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

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

  1. Igor Wojda. . Kt.Academy. 2018-02-08 [2020-02-27] (英语).
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.