/*
fn max(array: &[i32]) -> i32 {let mut max_index = 0;let mut i = 1;while i < array.len() {if array[i] > array[max_index] {max_index = i;}i += 1;}array[max_index]
}//下来一段代码并不是用来运行的,而是用来描述一下函数泛型的语法格式
//关键也编译不过:binary operation `>` cannot be applied to type `T`(并不是所有的数据类型都可以比大小)
fn max<T>(array: &[T]) -> T {let mut max_index = 0;let mut i = 1;while i < array.len() {if array[i] > array[max_index] {max_index = i;}i += 1;}array[max_index]}
*///最简单的使用
fn test_1() {struct Point<T> {x: T,y: T,}//使用时并没有声明类型,这里使用的是自动类型机制let p1 = Point { x: 1, y: 2 };let p2 = Point { x: 1.0, y: 2.0 };//但不允许出现类型不匹配的情况如下://let p3 = Point {x: 1, y: 2.0};//x 与 1 绑定时就已经将 T 设定为 i32,所以不允许再出现 f64 的类型。//如果我们想让 x 与 y 用不同的数据类型表示,可以使用两个泛型标识符struct Point2<T1, T2> {x: T1,y: T2,}
}fn test_2() {println!("-------------test_2------------");struct Point<T1, T2> {x: T1,y: T2,}//给泛型结构体定义泛型方法//注意,impl 关键字的后方必须有 <T>,因为它后面的 T 是以之为榜样的impl<T1, T2> Point<T1, T2> {fn x(&self) -> &T1 {&self.x}fn y(&self) -> &T2 {&self.y}}//也可以为其中的一种泛型添加方法impl Point<f64, i32> {fn xx(&self) -> f64 {self.x}}let p = Point { x: 1, y: 2 };println!("p.x = {},p.y = {}", p.x(), p.y());let p2 = Point { x: 1.1, y: 2 };println!("p.xx = {}", p2.xx());//也可以随意指定泛型代表的值,只不过由于没有对应的泛型方法,所有无方法可用let p3 = Point { x: 1.1, y: "1111111111" };}fn test_3() {println!("-------------test_3------------");/*在使用泛型时,类型参数常常必须使用 trait 作为约束(bound)来明确规定 类型应实现哪些功能。例如下面的例子用到了 Display trait 来打印所以它用 Display 来约束 T,也就是说 T 必须实现 Display。*/use std::fmt::*;#[derive(Debug,Default)]struct StDebug{}//trait Debug{}// 泛型 `T` 必须实现 `Debug` 。只要满足这点,无论什么类型// 都可以让下面函数正常工作。fn print_debug<T: Debug>(t: &T) {println!("{:?}", t);}let tt:StDebug = Default::default();print_debug(&tt);}fn main() {test_1();test_2();test_3();
}

27.泛型generics.rs相关推荐

  1. java的知识点23——泛型Generics、Collection接口、List特点和常用方法、 ArrayList特点和底层实现

    泛型Generics 一般通过"容器"来容纳和管理数据.程序中的"容器"就是用来容纳和管理数据. 数组就是一种容器,可以在其中放置对象或基本类型数据. 数组的优 ...

  2. 【TS】泛型 Generics

    泛型Generics,是指在定义函数Function.接口Interface 或类 Class 时不预先指定具体的类型,而是在使用的时候再指定类型的一种特征. // 函数名后的 <> 内传 ...

  3. Java基础学习——泛型(generics)学习一

    概述 在JDK 5.0,Java语言引入了好几个新的功能,其中很重要的一个就是泛型(generics). 本文就是对泛型的一个概述.你可以很熟悉其他语言中的类似结构,比如C++里的模板(templat ...

  4. Java基础 --- 泛型 Generics

    Java基础 --- 泛型 Generics 为什么需要泛型 泛型 Bounds for Type Variable Java虚拟机如何处理泛型 --- 泛型擦除 Restrictions and L ...

  5. 泛型 (Generics)一定是最易懂简单的

    文章目录 前言 一."形象比喻" 二.T.E.K.V.?的含义 三.泛型类 总结 前言 泛型(Generics)是在JDK 1.5 中推出的,其主要的目的是建立具有类型安全的集合框 ...

  6. java基础知识(七)-- 泛型(Generics )

    介绍 用法: List list = new ArrayList();// 1 list .add(new Integer(12));// 2 Integer x = (Integer) list . ...

  7. Rust泛型Generics

    泛型 泛型(Generics)是一种程序设计风格,它允许程序员在强类型语言(例如rust,c#,c++)中编写代码时使用通用类型.以rust为例,如果你想实现一个通用的add函数,让其在u8, i32 ...

  8. Java泛型Generics

    转载请标明出处: http://blog.csdn.net/wu_wxc/article/details/51493181 本文出自[吴孝城的CSDN博客] 泛型 泛型是JDK 5中引入的一个新特性 ...

  9. 泛型Generics

    通过自己的认识,泛型是为了防止重复的变成,比如一个方法,参数是int类型,这个时候当你需要再写一个功能相同,但是是关于string类型的.有人想到用object的装箱和拆箱操作实现,但是不安全. 泛型 ...

最新文章

  1. python until语句_Python3 循环
  2. 微型项目实践(8):数据访问的实现
  3. eclipse常用功能:代码重构(变量批量重命名)、自定义注释、代码模板、打开断言
  4. C# 指定Webbrowser控件所用IE内核版本
  5. javascript --- 判断只有1个为真
  6. 使用Hazelcast发布和订阅
  7. 2001.dumpbin工具使用
  8. 中国基因工程行业市场供需与战略研究报告
  9. javaweb一些总结
  10. 机器学习之BP神经网络算法实现图像分类
  11. http和https协议下,http可以正常下载,但是https却不能
  12. 上级对下级用通知合适吗_【判断题】通知只能作为下行文使用,下级对上级不能使用通知。 ( )...
  13. 【BZOJ5336】[TJOI2018]party(动态规划)
  14. 上帝模式下的shellcode
  15. 暴跌中重温周金涛:2018年之后大家能明白我说的话的意义
  16. 最新版微信 C# 微信HOOK 源代码,微信版本 3.0.0.57
  17. 您该怎样科学地准备过年?
  18. 【PR】简单一招教你使用蒙版做文字动画
  19. 《Microduino实战》——3.2 “Hello World!”—— 开启编程之旅
  20. 终于知道为什么片子太多会导致硬盘变慢了

热门文章

  1. File类概述和构造方法
  2. 私有属性和方法-子类对象不能直接访问
  3. 微型计算机具有什么等特点,微机原理 课后题 标准答案
  4. 200808C阶段一点菜系统界面及运行
  5. Ubuntu 华为开源镜像站 Mirror
  6. 【转】strcpy溢出的攻击示例
  7. 技巧:在Silverlight 2应用程序中切换用户控件
  8. 转 执行计划突变分析
  9. IE下iframe跨域session和cookie失效问题的解决方案
  10. Arduino开发板制作