多分派
多分派或译多重派发(multiple dispatch)或多方法(multimethod),是某些编程语言的一个特性,其中的函数或者方法,可以在运行时间(动态的)基于它的实际参数的类型,或在更一般的情况下于此之外的其他特性,来动态分派。多分派是对单分派多态的推广,这里的函数或方法调用,基于在其上调用方法的对象的派生类型,而动态分派。多分派使用一个或多个实际参数的组合特征,路由动态分派至实现函数或方法。 理解分派 软件工程师通常把代码写进…
共 9 篇文章
多分派或译多重派发(multiple dispatch)或多方法(multimethod),是某些编程语言的一个特性,其中的函数或者方法,可以在运行时间(动态的)基于它的实际参数的类型,或在更一般的情况下于此之外的其他特性,来动态分派。多分派是对单分派多态的推广,这里的函数或方法调用,基于在其上调用方法的对象的派生类型,而动态分派。多分派使用一个或多个实际参数的组合特征,路由动态分派至实现函数或方法。 理解分派 软件工程师通常把代码写进…
在计算机编程中,泛化函数(generic function)或译泛型函数,是为多态而定义的函数。 在静态类型语言中 在静态类型语言(比如C++和Java)中,术语“泛型函数”,指称一种叫做泛型编程的编译时间多态机制(),特别是参数多态。它们是使用定义的函数,意图用编译时间类型信息来解决它。编译器使用这些类型来实例化适合的版本,适当的解决任何函数重载。 在Common Lisp对象系统中 在某些面向对象编程系统,比如Common Lisp…
参数多态在程序设计语言与类型论中是指声明与定义函数、复合类型、变量时不指定其具体的类型,而把这部分类型作为参数使用,使得该定义对各种具体类型都适用。参数化多态使得语言更具表达力,同时保持了完全的静态类型安全。 这被称为泛化函数、泛化数据类型、泛型变量,形成了泛型编程的基础。 概述 参数多态允许函数或数据类型被一般性的书写,从而它可以“统一”的处理值而不用依赖于它们的类型。参数多态是使语言更加有表现力而仍维持完全的静态类型安全的一种方式。…
特设多态(ad hoc polymorphism)是程序设计语言的一种多态,多态函数有多个不同的实现,依赖于其实参而调用相应版本的函数。因此,特设多态仅支持有限数量的不同类型。函数重载乃至运算符重载也是特设多态的一种。 概述 特设多态与参数多态相对。ad hoc在这里并不是贬义,而是指这类多态并不是类型系统的基本特性,不是像参数多态那样适用于无穷多的类型,而是针对特定问题的解决方案。 换言之,参数多态对各模板参数的实现,是根据模板的通用…
在编程语言和类型论中,多态()指为不同数据类型的实体提供统一的接口,或使用一个单一的符号来表示多个不同的类型。 多态的最常见主要类别有: 特设多态:为个体的特定类型的任意集合定义一个共同接口。 参数多态:指定一个或多个类型不靠名字而是靠可以标识任何类型的抽象符号。 子类型(也叫做子类型多态或包含多态):一个名字指称很多不同的类的实例,这些类有某个共同的超类。 历史 在1967年,英国计算机科学家克里斯托弗·斯特雷奇在他的讲义合集《》中,…
泛型程序设计(英文:generic programming)是程序设计语言的一种风格或范型。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。各种程序语言和其编译器、运行环境对泛型的支持均不同。Ada、Delphi、Eiffel、Java、C#、F#、Swift 和 Visual Basic .NET 称之为泛型(generics);ML、Scala 和 Haskell 称之为参数多…
函数重载()或方法重载(),是某些编程语言(如 C++、C#、Java、Swift、Kotlin 等)的特性,允许创建多个具有不同实现的同名函数。对重载函数的调用会运行其适用于调用上下文的具体实现,即允许一个函数调用根据上下文执行不同的任务。 例如, 和 是重载函数。调用后者必须传入一个 参数,而调用前者时则不需要参数。一个常见的错误是在第二个函数中为 分配一个缺省值,这将会导致意义模糊的调用错误,因为编译器不知道使用这两种方法中的哪一…
在计算机科学中,动态分派(Dynamic dispatch)是指运行时选择哪一个多态的实现(具體的方法或函数)来调用的过程。动态分派通常被应用于面向对象编程(OOP)的语言和系统,并被认为是一个主要特点。 面向对象的系统把一个问题看作是一系列通过名字引用来制定操作的相互影响的物体。多态性是指一些可互换的物体虽有相同名字但却在行为上不同的现象。例如,一个文件对象和一个数据库对象都有一个储存记录的方法来记录需要存储的的个人记录,但是二者的实…
Java的泛型是在Java 编程语言中符合泛型编程范式的特性工具,于 2004 年在J2SE 5.0 版本中被加入。泛型特性旨在扩展 Java 的类型系统,以允许“一种类型或方法对各种类型的对象进行操作的同时保障编译时类型安全”。然而这一点并未完全实现,在 2016 年泛型特性被证明并不能在所有情况下保证编译时类型安全。 Java 集合框架支持泛型来指定存储在集合实例中的对象的类型。 1998 年, 吉拉德·布拉查(Gilad Brac…