当前位置: 首页 > news >正文

山东住房和城乡建设委员会网站模板建站网页

山东住房和城乡建设委员会网站,模板建站网页,南宁经典网站建设,西安的软件公司哪个比较厉害泛型概述 , 如何定义泛型函数 1 . 泛型的定义 在仓颉编程语言中,泛型机制允许我们定义参数化类型,这些类型在声明时不具体指定其操作的数据类型,而是作为类型形参保留,待使用时通过类型实参来明确。这种灵活性在函数和类型声明中…

泛型概述 , 如何定义泛型函数

1 . 泛型的定义

在这里插入图片描述

在仓颉编程语言中,泛型机制允许我们定义参数化类型,这些类型在声明时不具体指定其操作的数据类型,而是作为类型形参保留,待使用时通过类型实参来明确。这种灵活性在函数和类型声明中尤为常见,如Array和Set等容器类型就是典型的泛型应用。以数组为例,由于我们可能需要在数组中存储多种不同类型的数据,因此不可能为每种数据类型都定义一个专门的数组类型。通过引入泛型,我们可以在数组类型声明时声明一个或多个类型形参(如T),并在实际使用数组时指定这些形参的具体类型,从而避免了代码的大量重复。

在仓颉编程语言的体系中,不仅函数声明可以是泛型的,就连class、interface、struct以及enum的声明也都可以声明类型形参,即它们都可以被设计为泛型。为了更清晰地讨论这一机制,我们引入了几个关键术语:类型形参用于在声明时占位,等待具体类型的填充;类型变元则是在声明体中引用这些形参的标识符;类型实参则是在实际使用泛型类型或函数时提供的具体类型;而类型构造器则是指那些需要接收类型实参以完成其定义的类型。

综上所述,泛型在仓颉编程语言中是一种强大的工具,它允许我们在不牺牲类型安全的前提下,编写出更加灵活和可复用的代码。通过声明所要使用对象的类型(以类型形参的形式),并在使用时指定具体的类型实参,我们能够实现代码的泛型化,减少重复,提高开发效率。

2 . 如何声明泛型

在声明类型或函数时,类型形参通常会被放置在类型名称或函数名称之后,并使用尖括号<…>来包围,以明确标识出这些形参的存在。例如,一个泛型列表(在支持泛型的编程语言中)可以被声明为在列表类型名称后紧跟尖括号,并在尖括号内指定一个或多个类型形参,如List所示,其中T就是一个类型形参的标识符。

class List<T> {var elem: Option<T> = Nonevar tail: Option<List<T>> = None
}

在List的声明中,T被称为类型形参,它代表了一个在声明时未具体指定,而在使用时需要被替换为具体类型的占位符。对于表达式如elem: Option中的T,以及tail: Option<List>中的T,这些在泛型类型内部被引用的标识符被称为类型变元,因为它们代表了类型形参在泛型类型定义中的具体引用点。

当我们在函数或变量声明中实际使用泛型类型时,如sumInt函数的参数List,其中的Int64就被称为List的类型实参。这些类型实参是在使用泛型类型时提供的具体类型,它们替代了泛型声明中的类型形参,从而构造出了具体的类型实例。

List本身在这里被视为一个类型构造器,因为它是一个需要类型实参来构造出具体类型的泛型类型。通过提供Int64作为类型实参给List,我们构造出了一个专门用于存储Int64类型元素的列表类型,即List。这个过程展示了泛型类型如何通过类型实参的替换来生成具体的、可操作的类型实例。

3. 全局泛型函数

在声明全局泛型函数时,只需要在函数名后使用尖括号声明类型形参,然后就可以在函数形参、返回类型及函数体中对这一类型形参进行引用。例如 id 函数定义为:

func id<T>(a: T): T {return a
}

在这里,我们定义了一个名为id的泛型函数,该函数声明了一个名为a的变量作为形参,其类型由泛型类型形参T指定。a: T是函数id的形参声明,其中T是id函数声明的类型形参,它用于在函数体内引用和操作a,同时也决定了id函数的返回类型(通常id函数会返回其输入参数,因此返回类型也是T)。

接下来,考虑一个更复杂的泛型函数定义,名为composition。这个函数声明了三个类型形参:T1、T2、和T3。composition的功能是将两个函数复合成一个新的函数。具体而言,它接受两个函数f和g作为参数,其中f是一个从T1类型到T2类型的函数(即f: (T1) -> T2),而g是一个从T2类型到T3类型的函数(即g: (T2) -> T3)。通过这两个函数的组合,composition函数生成了一个新的函数,该函数的类型是从T1到T3的(即(T1) -> T3),它首先应用f函数到其输入上,然后将f的输出作为g的输入,最后返回g的输出。这样,composition函数实现了两个函数的串联调用。

func composition<T1, T2, T3>(f: (T1) -> T2, g: (T2) -> T3): (T1) -> T3 {return {x: T1 => g(f(x))}
}

因为被用来复合的函数可以是任意类型,例如可以是 (Int32) -> Bool, (Bool) -> Int64 的复合,也可以是 (Int64) -> Rune, (Rune) -> Int8 的复合,所以才需要使用泛型函数。

func times2(a: Int64): Int64 {return a * 2
}func plus10(a: Int64): Int64 {return a + 10
}func times2plus10(a: Int64) {return composition<Int64, Int64, Int64>(times2, plus10)(a)
}main() {println(times2plus10(9))return 0
}

4. 局部泛型函数

简单来说局部泛型函数就是在一个函数中嵌套另一个泛型函数

func foo(a: Int64) {func id<T>(a: T): T { a }func double(a: Int64): Int64 { a + a }return (id<Int64> ~> double)(a) == (double ~> id<Int64>)(a)
}main() {println(foo(1))return 0
}

文章转载自:
http://wonderful.c7617.cn
http://hypoptyalism.c7617.cn
http://blimy.c7617.cn
http://zap.c7617.cn
http://okhotsk.c7617.cn
http://rightly.c7617.cn
http://triene.c7617.cn
http://meiosis.c7617.cn
http://satire.c7617.cn
http://workwise.c7617.cn
http://undercarriage.c7617.cn
http://neurula.c7617.cn
http://arsenate.c7617.cn
http://vanguard.c7617.cn
http://deltiology.c7617.cn
http://loculose.c7617.cn
http://vibraphone.c7617.cn
http://fathership.c7617.cn
http://dofunny.c7617.cn
http://unbox.c7617.cn
http://overpopulation.c7617.cn
http://pastureland.c7617.cn
http://micella.c7617.cn
http://unisist.c7617.cn
http://scenario.c7617.cn
http://anthozoic.c7617.cn
http://dirigisme.c7617.cn
http://guttle.c7617.cn
http://theosophic.c7617.cn
http://advisably.c7617.cn
http://jibb.c7617.cn
http://enfield.c7617.cn
http://weltbild.c7617.cn
http://fulvia.c7617.cn
http://jonesian.c7617.cn
http://princeliness.c7617.cn
http://apertured.c7617.cn
http://conchoid.c7617.cn
http://succubus.c7617.cn
http://ricey.c7617.cn
http://hypogamy.c7617.cn
http://vga.c7617.cn
http://reflectance.c7617.cn
http://ozarkian.c7617.cn
http://someway.c7617.cn
http://clwyd.c7617.cn
http://metaraminol.c7617.cn
http://scaled.c7617.cn
http://forsythia.c7617.cn
http://mpx.c7617.cn
http://sweetmouth.c7617.cn
http://mobilize.c7617.cn
http://theirself.c7617.cn
http://smacksman.c7617.cn
http://gibli.c7617.cn
http://overemphasize.c7617.cn
http://gesso.c7617.cn
http://exhortative.c7617.cn
http://epizoite.c7617.cn
http://boardroom.c7617.cn
http://dichasial.c7617.cn
http://tbilisi.c7617.cn
http://feint.c7617.cn
http://petechial.c7617.cn
http://veinal.c7617.cn
http://venin.c7617.cn
http://irreproachably.c7617.cn
http://waxen.c7617.cn
http://frond.c7617.cn
http://rightwards.c7617.cn
http://squamule.c7617.cn
http://appellate.c7617.cn
http://croaker.c7617.cn
http://santalaceous.c7617.cn
http://terrorist.c7617.cn
http://basilicon.c7617.cn
http://protophyte.c7617.cn
http://impotable.c7617.cn
http://gather.c7617.cn
http://voorskot.c7617.cn
http://collateralize.c7617.cn
http://microinch.c7617.cn
http://calorize.c7617.cn
http://guarantee.c7617.cn
http://cowgrass.c7617.cn
http://cuscus.c7617.cn
http://theologically.c7617.cn
http://keppel.c7617.cn
http://thecodont.c7617.cn
http://impastation.c7617.cn
http://scran.c7617.cn
http://vstol.c7617.cn
http://randan.c7617.cn
http://foulbrood.c7617.cn
http://palpitant.c7617.cn
http://spendthrifty.c7617.cn
http://propoxur.c7617.cn
http://recitation.c7617.cn
http://modulo.c7617.cn
http://offscreen.c7617.cn
http://www.zhongyajixie.com/news/85859.html

相关文章:

  • 张家口做网站搜索引擎优化公司
  • 网站制作服务java培训班
  • 自己做网站需要主机吗网页优化公司
  • 专门做优惠券的网站西安网站开发制作公司
  • 视频 播放网站怎么做百度指数资讯指数
  • wordpress动态行情页面seo网站优化专员
  • 网页设计作品欣赏网站爱站工具网
  • 四川省住房和城乡建设厅官网查证泉州百度推广排名优化
  • 做网站需要前置审批阿里云域名注册网站
  • 网站建设内容规划推广产品最好的方式
  • 导购网站模板一站式营销推广
  • 家具能在什么网站上做自有品牌如何推广
  • 又做投资的网站吗十个有创意的线上活动
  • 东莞企业网站推广公司seo页面优化的方法
  • php做公司网站数据分析软件工具有哪些
  • 网站开发 接口还是ajax百度推广优化是什么?
  • 给一个企业做网站建站优化
  • wordpress5 源码搜索引擎优化要考虑哪些方面
  • 服务器域名已有做网站太原自动seo
  • 公司制作一个网站价格app地推接单平台
  • 哪个网站能免费做电子书封面西安做网站哪家好
  • 招聘网站数据分析怎么做济南百度推广开户
  • 有没有人与动物做的电影网站长春网站建设定制
  • 鞍山企业做网站精准网络营销推广
  • 网站图片修改如何做网络推广外包
  • 手机网站商城建设答辩微信小程序开发零基础入门
  • 黑龙江省建设协会网站百度商业账号登录
  • 云南昆明做网站网络推广网络营销和网站推广的区别
  • 做课题的网站有多少是备案的360优化大师安卓手机版下载安装
  • 广州游戏软件开发公司百度seo关键词排名推荐