RUST网络客户端的基本技术说明-泛型

一、泛型

啥是泛型,啥是泛型编程?泛型,说得通俗一些,就是类型无关的编程。更严格的定义可以去软件相关的书籍去学习。泛型的优势在于,开发人员可以不用考虑具体的数据类型而注重于数据结构和逻辑的开发,减少重复代码逻辑的开发,提高开发效率。用一个常用的例子,如果你比较两个整数的大小,写好代码后,客户又提出比较两个长整型的数大小,然后又提出两个单精度的比较,然后又是双精度,然后又…,其实对你来说,可能好多的代码除了类型,完全都是一样的。
泛型有泛型的好处,也有它的不好之处,比如代码比较晦涩;出现问题不好调试定位;会产生代码膨胀等一系列的问题。但是瑕不掩瑜啊,泛型还是快速的被几乎主流的语言都支持了。泛型这个名字,也有别名,比如在c++中叫做模板,只要明白意思即可,不必纠结这些小的细节。

二、Rust的泛型

泛型编程,看来Rust作为一种后来的语言必须得支持啊。在前面分析trait和关联类型时,提到过泛型,对泛型的名词至少不再一无所知。在Rust看来,泛型只不过是一种多态,一种单态化的过程。可能对于很多小白有点晕,那直白一些来说,就把当成一个饮水机的出口,你按热水按钮,就自动出来热水,按冰水按钮就出冰水,默认就是常温。但它们只有一个出水口。而具体到某种水,就是所谓的单态。
从Rust来看,常见的Option就是一种泛型:

enum Option<T> {
    Some(T),
    None,
}

let i = Some(15);
let f = Some(25.0);

很简单的一个枚举泛型。这里再说明一下,这上大写的T,并不是必须要用T,用其它的大写字母都可以,用T只是一种习惯,如果有c++或者c#等经验的可以知道,其中也有K,U,N等等。不要把它当成一个关键字就可以了。它只是一种数据类型的代码。
泛型在Rust中比较乱,其实就是两大类:数据结构定义(枚举体和结构体)和函数(方法)。

三、应用

看一个简单的应用:

use std::ops::Add;
fn add<T: Add<T, Output=T>>(a:T, b:T) -> T {
    a + b
}
fn main() {
    println!("{}", add(10i32, 1i32));
    println!("{}", add(10.11f32, 10.22f32));
}

这个例子大家可能一眼就看明白了,Add的尖括号内指明了输入和输出参数类型都为T,后面的函数体也是如此实现的。再看一个带泛型约束的:

use std::ops::Add;
#[derive(Debug)]
struct Point<T: Add<T, Output = T>> { //限制类型T必须实现了Add trait,否则无法进行+操作。
    x: T,
    y: T,
}
impl<T: Add<T, Output = T>> Add for Point<T> {
    type Output = Point<T>;
    fn add(self, p: Point<T>) -> Point<T> {
        Point{
            x: self.x + p.x,
            y: self.y + p.y,
        }
    }
}
fn add<T: Add<T, Output=T>>(a:T, b:T) -> T {
    a + b
}
fn main() {
    let p1 = Point{x: 1.1f32, y: 1.1f32};
    let p2 = Point{x: 2.1f32, y: 2.1f32};
    println!("{:?}", add(p1, p2));
    let p3 = Point{x: 1i32, y: 1i32};
    let p4 = Point{x: 2i32, y: 2i32};
    println!("{:?}", add(p3, p4));
}

需要说明的是在Rust中有很多预置的约束如PartialOrd、Copy等等,这些在实际编程过程中,要对具体的实际情况进行分析处理,多看帮助文档和相关的开发文档吧,一些细节总是在完善,单纯的对一个问题,Rust社区和相关的API接口文档可能会更清晰。

  • 代码主要来自《Rust Primer》

四、总结

世事洞明皆学问,把Rust的基础接口弄个底儿掉,应该水平差不到哪儿吧。基础的知识弄得门儿清,即使不出彩,总是有出彩的基础吧。做为后学的诸君,勤学不辍,才是根本!
努力吧,归来的少年!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值