首页 > 其他分享 >RUST 入门(3)泛型

RUST 入门(3)泛型

时间:2023-02-02 17:47:18浏览次数:44  
标签:入门 Point list char item let largest 泛型 RUST

泛型是具体类型或者其他属性的抽象替代,用于减少代码重复。

在函数中使用

示例 求最大值 [i32] 和 [char]

fn main() {
    let number_list = vec![1,2,3,4,5,6,100,8,9];
    let max_number=largest_i32(&number_list);
    println!("最大的数字是{}",max_number);

    let char_list=vec!['x','a','c','v'];
    let max_char=largest_char(&char_list);
    println!("最大的字符是{}",max_char);

    let largest1=largest(&number_list);
    let largest2=largest(&char_list);
    println!("largest1 是{largest1} largest2 是{largest2}");
}
fn largest_i32(list:&[i32] )->i32{
    let mut largest=list[0];
    for &item in list.iter(){
        if item >largest{
            largest=item;
        }
    }
    largest
}
fn largest_char(list:&[char] )->char{
    let mut largest=list[0];
    for &item in list.iter(){
        if item >largest{
            largest=item;
        }
    }
    largest
}
//使用泛型
fn largest<T:PartialOrd+Copy> (list:&[T])->T
{
    let mut largest = list[0];
    for &item in list.iter()
    {
        if item >largest
        {
            largest=item;  
        }
    }
    largest
}

在结构体中

fn main() {
    let integer = Point{x:5,y:6};
    let floate=Point{x:1.1,y:1.2};
    println!("{:#?}",integer);
    println!("{:?}",floate);
    let test = Point2{x:'A',y:100};
    println!("{:?}",test);
}
#[derive(Debug)]
struct  Point<T>{
    x:T,
    y:T
}
#[derive(Debug)]
struct  Point2<T,U>{
    x:T,
    y:U
}

在 函数 中使用泛型

fn main() {
     let p1=Point{x:1,y:'a'};
     let p2=Point{x:"你好",y:2.99};

     let p3 = p1.create_mix_point(&p2);
     println!("p3.x={},p3.y={}",p3.get_x(),p3.get_y());

     let p4 =p2.create_mix_point(&p1);
     println!("p4.x={},p4.y={}",p4.get_x(),p4.get_y());
}

struct Point<A:Copy,B:Copy>
{
x:A,
y:B,
}
impl<A:Copy,B:Copy> Point<A,B> {
    fn get_x(&self)->&A{
        &self.x
    }
    fn get_y(&self)->&B{
        &self.y
    }
    fn create_mix_point<C:Copy,D:Copy>(&self,other:&Point<C,D>)->Point<A,D>{
        Point{
            x: self.x,
            y:other.y
        }
    }
}

 

 

泛型 Option<T> 被编译器替换为了具体的定义。因为 Rust 会将每种情况下的泛型代码编译为具体类型,使用泛型没有运行时开销。当代码运行时,它的执行效率就跟好像手写每个具体定义的重复代码一样。这个单态化过程正是 Rust 泛型在运行时极其高效的原因。

上面这段话我不知道什么意思,但我大为震撼!0.0

标签:入门,Point,list,char,item,let,largest,泛型,RUST
From: https://www.cnblogs.com/ddls/p/17085996.html

相关文章

  • python之路62 drf从入门到成神 3 序列化类常用字段和字段参数、序列化高级用法之sour
    作业#原生的django中request中没有datafromdjango.shortcutsimportrender,HttpResponseimportjson#通过装饰器做,装饰器视图函数的,以后都会有requestdefwr......
  • python入门之元组(tuple)
    """元组tuple1.由一系列变量组成的不可变系列容器2.不可变是指一但创建,不可以再添加/删除/修改元素3.列表用[],元组用()4.列表和元......
  • Dubbo 入门系列之基于 Dubbo API 开发微服务应用
    目标从零上手开发基于Dubbo的微服务难度低环境要求系统:Windows、Linux、MacOSJDK8及以上(推荐使用JDK17)GitIntelliJIDEA(可选)Docker(可选)动手实......
  • Kaka入门级教程
    Kaka知识全解析ApacheKafka是什么?摘抄自官网首页的一段话:ApacheKafka是一个开源分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用......
  • python入门之列表推导式
    """列表推导式定义:使用简易方法,将可迭代对象转换为列表语法:变量=[表达式for变量in可迭代对象]变量=[表达式for......
  • Tensorflow人工智能入门(二)
     translatorAfrikaansAlbanian-shqipeArabic-‎‫العربية‬‎Armenian-ՀայերէնAzerbaijani-azərbaycancaBasque-euskaraBelarus......
  • 树链剖分入门
    目录树链剖分算法思想模版-树链剖分旅行P4374P4211CF1023FP1505P2486P7735P3976Trick总结树链剖分这玩意也是才开始预习,写得不好勿喷。约定记号:\(siz[x]\),\(x\)为根的......
  • Git入门图文教程(1.5W字40图)
     Git入门图文教程(1.5W字40图)......
  • python爬虫入门脚本示例
    例如在某个目录xx下,有个普通的文件,有些文件后缀*.txt,有的却没有后缀名。现在写一个程序希望将xx目录下没有后缀名的文件改成*.txt结尾。知识点:需要用到python的os模块直接......
  • dapr入门与本地托管模式尝试
    1简介Dapr是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和......