参数多态性
编辑在编程语言和类型理论中,参数多态性允许给一段代码一个通用类型,用变量代替实际类型,然后根据需要用特定类型进行实例化。参数多态的函数和数据类型有时被分别称为通用函数和通用数据类型,它们构成了通用编程的基础。参数多态性可以与临时多态性进行对比。参数多态的定义是统一的:无论它们被实例化在什么类型,它们的行为都是相同的。与此相反,临时多态定义对每种类型都有不同的定义。因此,临时多态性通常只能支持有限数量的不同类型,因为必须为每个类型提供一个单独的实现。
基本定义
编辑有可能编写不依赖于其参数类型的函数。例如,身份函数简单地返回其未修改的参数。这自然产生了一系列潜在的类型,比如通过引入一个普遍量化的类型变量,可以被赋予一个单一的、最一般的类型。然后,多态定义可以通过替换任何具体类型来实例化为{displaystylealpha}的任何具体类型来实例化。这样就产生了完整的潜在类型系列。身份函数是一个特别极端的例子,但许多其他函数也受益于参数化多态性。例如,一个{displaystyle{mathsf{append}}函数将两个列表相加,但并不意味着它是一个多义词。}函数将两个列表相加,它不检查列表中的元素,只检查列表结构本身。因此。{displaystyle{mathsf{append}}可以被赋予类似的类型。}可以被赋予一个类似的类型系列,比如说是在一个单一的类型上进行参数化的,但函数可以在任意多的类型上进行参数化。例如,在{displaystyle{mathsf{snd}}分别返回一对元素的xxx和第二元素的函数可以被赋予以下类型:{displaystyle{mathsf{snd}}。
分别返回一对元素的xxx和第二元素的函数,可以被赋予以下类型。{displaystyle{mathsf{fst}}的调用中被实例化为Bol。}因此,整个表达式的类型是用于引入参数多态性的语法在不同的编程语言中差异很大。例如,在一些编程语言中,如Haskell,其∀α{displaystyle/forall/alpha}量词是隐式的,并且可以是量词是隐性的,可以省略。其他语言则要求在参数多态函数的某些或全部调用位置明确地实例化类型。历史参数多态性在1975年首次被引入到ML编程语言中。今天,它存在于StandardML,OCaml,F#,Ada,Haskell,Mercury,VisualProlog,Scala,Julia,Python,TypeScript,C++和其他语言中。Java、C#、VisualBasic.NET和Delphi都各自引入了参数多态性的泛型。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/170775/