关于前端:Rust编程语言中的定义类型

30次阅读

共计 1924 个字符,预计需要花费 5 分钟才能阅读完成。

Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~


在 Rust 中自定义类型有两种形式,其一是定义构造体,其二是定义枚举,通过这两种形式来定义符合实际场景的简单类型。

构造体的定义和应用

  1. 定义构造体的关键字是 struct
  2. 构造体格调有 C-StyleTuple-StyleUnit-Style三种;

1. C-Style 一般构造体:

定义:蕴含两个字段代表“坐标点构造体”;

struct Point {
    x: f32,
    y: f32,
}

创立并打印输出 Point 构造体,并在打印时应用两个 {:?} 别离代码 PointX 和 PointY;

let point = Point {x: 10.23, y: 29.39};
println!("Point x {:?},y{:?}", point.x, point.y);

// output:Point x 10.23,y29.39

2. 定义构造体的字段为另一个构造体:

定义:蕴含终点和起点两个坐标点的“线构造体”;

struct Line {
    start: Point,
    end: Point,
}

创立并打印输出 Line 构造体,在创立时用到了解构来简化应用,在输入时应用具名的形式来指定输入的内容;

let Line {start, end} = Line {start: Point { x: 0.00, y: 0.00},
    end: Point {x: 100.00, y: 0.00},
};
println!("Line start{startX:?}{startY:?},end{endX:?}end{endY:?}",
    startX = start.x,
    startY = start.y,
    endX = end.x,
    endY = end.y,
);
// output:Line start0.00.0,end100.0end0.0

3. Tuple-Style 构造体:

定义:蕴含原点和半径的“环构造体”,其中元祖的次要特点就是能够将不同类型的数据装到一起;

struct Ring(Point, Line);

创立并打印 Ring 构造体;

let Ring(_point, _line) = Ring(point, Line { start, end});
println!("Ring {pointX:?} {pointY:?},start{startX:?} {startY:?},end{endX:?} {endY:?}",
    pointX = _point.x,
    pointY = _point.y,
    startX = _line.start.x,
    startY = _line.start.y,
    endX = _line.end.x,
    endY = _line.end.y,
);
// output:Ring 10.23 29.39,start0.0 0.0,end100.0 0.0

4. Unit-Style 单元构造体

定义和创立:特点就是没有字段所以能够在须要实现一个个性但不想存储类型自身的任何数据时应用;

struct Empty;
let x = Empty;
println!("{:p}", &x);
// output:0xca675df588

枚举的定义和应用

定义枚举:Rust 中枚举的类型由一个或多个的一般构造体,元祖构造体或单元构造体组成;

enum WebEvent {
    PageLoad,                 // 单元构造体
    KeyPress(char),           // 元祖构造体
    Click {x: i64, y: i64}, // 一般 C -Style 构造体
}

应用别名:通过应用 type 关键字定义的别名来简化后续的应用;

type WE = WebEvent;

匹配枚举:应用 match 来匹配后做对应解决,同时应用了 use 简化代码

fn inspect(event: WE) {
    // 通过 use 简化
    use WebEvent::{Click, KeyPress, PageLoad};

    // 匹配后做对应解决
    match event {PageLoad => println!("PageLoad"),
        KeyPress(c) => println!("KeyPress:{}", c),
        Click {x, y} => {println!("x:{}, y:{}", x, y);
        }
    }
}

// 执行定义的函数,当定义的字段存在没有应用的状况,能够通过在文件顶部键入 `#![allow(dead_code)]` 来疏忽编译的谬误正告
inspect(WebEvent::PageLoad);
inspect(WebEvent::KeyPress('a'));
inspect(WebEvent::Click { x: 100, y: 200});

总结:

本篇有点水了,总结了一下 Rust 编程语言的自定义类型的形式,次要是一些指针语法切实有点拗,下次留神~


欢送关注我的公众号“前端小鑫同学”,原创技术文章第一工夫推送。

正文完
 0