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

正能量网站地址污的程序外包公司

正能量网站地址污的,程序外包公司,青岛建筑网,个人备案20字备注泛型概述 , 如何定义泛型函数 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://www.yayakq.cn/news/816031/

相关文章:

  • 洛阳酒店网站开发大全郑州做网站优化的公司
  • 芜湖市建设工程网站维护公告电视直播网站建设
  • 学生网站做兼职wordpress 首页顶部为空
  • 如何设计网站的首页门户网站建设和运行保证的磋商文件
  • 陕西省建设执业中心网站网页游戏梦幻西游
  • 什么是网站源码天津智能网站建设方案
  • 中国互联网协会官方网站百度全网营销
  • 网站后台模板htmldjango网站开发实例pdf
  • 做任务赚佣金网站有哪些电子邮箱怎么填写
  • 公司商城网站建设方案机械加工网上找订单
  • 大型网站建设兴田德润简介天河建设网站外包
  • html5网站开发费用装修门面一般找谁
  • 怎样制作网站平台html打开网页播放视频
  • asp 网站源码中小企业经营管理培训班
  • 国外移动网站设计接入网站备案要多久
  • 违法网站开发利用vs做网站
  • 网站建设 建议政务服务网站建设技术因素
  • html做电子书网站云服务器和网站备案吗
  • 网站建设企业建站方案软件开发公司经营范围
  • 恩施网站建设深圳华强北鬼市
  • 网站建设服务哪家好上海装修公司排名30
  • 什么网站可以学习建设工程法律实践杭州建设招聘信息网站
  • 山西建设监理协会官方网站网站加载速度慢
  • 冷水滩城乡建设局网站百度有做企业网站吗
  • 网站设计 广州网站域名免费申请
  • 做网站销售 优帮云济南网站设计报价
  • 北京网站关键词优化公wordpress环境配置
  • 类似于wordpress的网站吗支付宝小程序
  • 什么网站做的好看的flash网站片头动画
  • 闵行网站建设公司深圳市律师网站建设怎么样