Go 1.18 中的泛型
Go 1.18 中的泛型 欧长坤 changkun.de/s/generics118 2022/03/30 1 语法和使用 2 什么时候需要泛型? 3 当使用接口作为函数的形参类型时,函数调用方传递的实际参数可以是完全不同的 类型: type T interface { Add(T) T } func Sum(elems ...T) (sum T) { // T 可以是任何实现 (sum S) { // S 的底层类型必须底层类型为 int 约束的类型 for i := range elems { sum += elems[i] } return } 使用泛型的根本目的是: 类型安全的参数传递,以及对实现的类型进行抽象 具有类型参数 (Type Parameter) 的签名 4 func F[T C](v T) (T, error) 普通参数列表 interface contains type constraints func bar(T Ib[int]) {} // OK 为什么第二个 bar 不会报错? 13 抽象能力 泛型没有任何运行时的机制,所以关于泛型的组件只发生在编译时期 对于下面的接口而言,无法作为普通参数使用: func Foo[T any]() {} x := Foo // ERROR: cannot use0 码力 | 45 页 | 501.50 KB | 1 年前3JAVA 应用与开发 - 泛型
应用与开发 泛 型 让我们愉快的 Coding 起来吧... ��� �������������� October 5, 2018 ���� 理��型的��,������� ▶ �合���的�型 ▶ �型的����� ������型类��型�法 ▶ 理�类型参数 ▶ 理�����������的�型类��型�法 ▶ 受��的类型参数 ��处理�型类型,����������型�器����作 作 1 19 �� 1 �型�� 2 �型类��型�法 3 处理�型类型 2 19 �型�� ���泛型 �型�Generics� �型��� JDK 5.0 ����,��������������� 型���� 作为��� Java 类型体�的��,���型���� Java ��� �的类型������������ 3 19 ���泛型 O 集合框架中的数据造型问题 � ��合�取�的元素��������型�为���的类型� 无泛型机制的集合容器 1 Vector v = new Vector(); 2 v.addElement(new Person("Tom", 18)); 3 Person p = (Person) v.elementAt(0); 4 p.showInfo(); 4 19 ���泛型 O 集合框架中的数据造型问题 ��0 码力 | 35 页 | 587.40 KB | 1 年前3MoonBit月兔编程语言 现代编程思想 第六课 泛型与高阶函数
现代编程思想 泛型与⾼阶函数 Hongbo Zhang 1 设计良好的抽象 软件⼯程中,我们要设计良好的抽象 当代码多次重复出现 当抽出的逻辑具有合适的语义 编程语⾔为我们提供了各种抽象的⼿段 函数、泛型、⾼阶函数、接⼝…… 2 泛型函数与泛型数据 3 堆栈 栈是⼀个由⼀系列对象组成的⼀个集合,这些对象的插⼊和删除遵循后进先出原则 (Last In First Out) 11. } 12. } 我们希望存储很多很多类型在堆栈中 每个类型都要定义⼀个对应的堆栈吗? IntStack 和 StringStack 似乎结构⼀模⼀样? 7 泛型数据结构与泛型函数 泛型数据结构与泛型函数以类型为参数,构建更抽象的结构 1. enum Stack[T] { 2. Empty 3. NonEmpty(T, Stack[T]) 4. } 5. fn Stack::empty[T]() (Some(top), rest) 11. } 12. } 将 T 替换为 Int 或 String 即相当于 IntStack 与 StringStack 8 泛型数据结构与泛型函数 我们⽤ [<类型1>, <类型2>, ...] 来定义泛型的类型参数 enum Stack[T]{ Empty; NonEmpty(T, Stack[T]) } struct Pair[A, B]{ first:0 码力 | 27 页 | 2.56 MB | 1 年前3Nim 2.0.2 中文手册
变量本质上是地址的名称,每个变量和地址都有特定 的 type "类型",变量的类型被称为 static type "静态类型", 地址的类型被称为 dynamic type "动态类型"。如果静态类型与动态类 型不相同,它就是动态类型的⽗类或⼦类。 identi�er "标识符"是变量、类型、过程等的名称声明符号,⼀个声明所适⽤的程序区域被称为该声明的 scope "作⽤域", 作⽤域 可以嵌套,⼀个标识符 Token 标记( - 1 ): 以撇号 ( \' ) 开始的后缀被称为 type suf�x "类型后缀"。没有类型后缀的字⾯值是整数类型,当包含⼀个点或 E|e 时是 float 类 型。如果字⾯值的范围在 low(int32)..high(int32) 之间,那么这个整数类型就是 int ,否则就是 int64 。为了记数⽅便,如 果类型后缀明确,那么后缀的撇号是可选的(只有 了⼀个标识符, ⽤来表示这个⾃定义类型。 这些是主要的类型分类: 序数类型(包括整数、布尔、字符、枚举、枚举⼦范围) 浮点类型 字符串类型 结构化类型 引⽤(指针)类型 过程类型 泛型类型 序数类型 序数类型有以下特征: 序数类型是可数的和有序的。因⽽允许使⽤如 inc , ord , dec 等函数,来操作已定义的序数类型。 序数类型具有最⼩可使⽤值,可以通过 low(type)0 码力 | 127 页 | 7.05 MB | 1 年前3《Java 应用与开发》课程讲义 - 王晓东
82 8 泛型 83 8.1 泛型概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 8.1.1 泛型的概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 8.1.2 集合框架中的泛型 . . . . . . . 85 8.2 泛型类与泛型方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 8.2.1 定义泛型类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 8.2.2 定义泛型方法 . . . . . . . . . . . . 88 8.3 处理泛型类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 8.3.1 遍历泛型 Vector 集合 . . . . . . . . . . . . . . . . . . . . . . . . . . 89 8.3.2 泛型类型的处理方法 . . . . . .0 码力 | 330 页 | 6.54 MB | 1 年前3Rust 程序设计语言简体中文版
......................... 199 10. 泛型、Trait 和生命周期 .................................................................................................... 204 10.1. 泛型数据类型 ............................... 用程序接口)。第 8 章讨论标准库提供的常见集合数据结构,例如 Vector(向量)、字符串和 Hash Map(散列表)。第 9 章探索 Rust 的错误处理的理念与技术。 第 10 章深入介绍泛型(generic)、Trait 和生命周期(lifetime),这些功能让你能够定义适用 于多种类型的代码。第 11 章全面讲述了测试,,因为就算 Rust 有安全保证,也需要测试确保 程序逻辑正确。第 指的是包含输 入的字符串类型 guess 变量。String 实例的 trim 方法会去除字符串开头和结尾的空白字 符,我们必须执行此方法才能将字符串与 u32 比较,因为 u32 只能包含数值型数据。用户必 35/600 Rust 程序设计语言 简体中文版 须输入 enter 键才能让 read_line 返回并输入他们的猜想,这将会在字符串中增加一个换行 (newline)符。例如,用户输入0 码力 | 600 页 | 12.99 MB | 1 年前3Rust 程序设计语言 简体中文版 1.85.0
. . . . . . 184 10. 泛型、Trait 和生命周期 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 10.1. 泛型数据类型 . . . . . . . . . API(应 用程序接口)。第八章讨论标准库提供的常见集合数据结构,例如 Vector(向量)、字符串和 Hash Map(散列表)。第九章探索 Rust 的错误处理的理念与技术。 第十章深入介绍泛型(generic)、Trait 和生命周期(lifetime),这些功能让你能够定义适用 于多种类型的代码。第十一章全面讲述了测试,因为就算 Rust 有安全保证,也需要测试确保 程序逻辑正确。第十二章中将会构建我们自己的 let guess = String::new() 时,Rust 推断出 guess 应该是 String 类型,并不需要我们写出类型。另一方面,secret_number,是数字类型。几个数字类 型拥有 1 到 100 之间的值:32 位数字 i32;32 位无符号数字 u32;64 位数字 i64 等等。 Rust 默认使用 i32,所以它是 secret_number 的类型,除非增加类型信息,或任何能让0 码力 | 562 页 | 3.23 MB | 10 天前3Go 2 Generics? A (P)review
Generics? A (P)review 主要内容 ● 泛型的起源 ● 泛型的早期设计 ● Go 2 的「合约」 ● 上手时间 ● 历史性评述 ● 展望 泛型的起源 Origin of Generics 2020 © Changkun Ou · Go 夜读 · Go 2 Generics? A (P)review 当我们谈论泛型时,我们在谈论什么? 4 多态是同一形式表现出不同行为的一种特性。在 调用第二个 Add("1", "2") // 编译时不检查,运行时找不到实现,崩溃 参数化多态(Parametric Polymorphism)根据实参类型生成不同的版本 ,支持任意数量的 调用。即泛型 func Add(a, b T) T{ return a+b } Add(1, 2) // 编译器生成 T = int 的 Add Add(float64(1.0), Generics? A (P)review 泛型做到了什么接口做不到的事情? 5 当使用 interface{} 时,a、b、返回值都可以在运行时表现为不同类型,取决于内部 实现如何对参数进行断言: type T interface { ... } func Max(a, b T) T { ... } // T 是接口 当使用泛型时,a、b、返回值必须为同一类型,类型参数施加了这一强制性保障: func0 码力 | 41 页 | 770.62 KB | 1 年前3Comprehensive Rust(繁体中文)
. 22 4.3 Playground . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5 型別和值 24 5.1 Hello, World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.2 26 5.5 字串 (String) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.6 型別推斷 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.7 練習:費波那契數列 . . 45 9.3.1 解決方案 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 10 使用者定義的型別 47 10.1 結構體 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 10.20 码力 | 358 页 | 1.41 MB | 10 月前3Comprehensive Rust(繁体中文) 202406
. 21 4.3 Playground . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 5 型別和值 23 5.1 Hello, World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.2 25 5.5 字串 (String) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.6 型別推斷 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.7 練習:費波那契數列 . . 43 9.3.1 解決方案 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 10 使用者定義的型別 45 10.1 結構體 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 10.20 码力 | 356 页 | 1.41 MB | 1 年前3
共 336 条
- 1
- 2
- 3
- 4
- 5
- 6
- 34