前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Rust编程语言中的定义类型

Rust编程语言中的定义类型

作者头像
前端小鑫同学
发布2022-12-26 10:30:48
5200
发布2022-12-26 10:30:48
举报
文章被收录于专栏:小鑫同学编程历险记

Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~ 在Rust中自定义类型有两种方式,其一是定义结构体,其二是定义枚举,通过这两种方式来定义符合实际场景的复杂类型。

结构体的定义和使用

  1. 定义结构体的关键字是 struct
  2. 结构体风格有C-StyleTuple-StyleUnit-Style三种;
1. C-Style普通结构体:

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

代码语言:javascript
复制
struct Point {
    x: f32,
    y: f32,
}

创建并打印输出Point结构体,并在打印时使用两个{:?}分别代码PointX和PointY;

代码语言:javascript
复制
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. 定义结构体的字段为另一个结构体:

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

代码语言:javascript
复制
struct Line {
    start: Point,
    end: Point,
}

创建并打印输出Line结构体,在创建时用到了解构来简化使用,在输出时使用具名的方式来指定输出的内容;

代码语言:javascript
复制
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结构体:

定义:包含原点和半径的“环结构体”,其中元祖的主要特点就是可以将不同类型的数据装到一起;

代码语言:javascript
复制
struct Ring(Point, Line);

创建并打印Ring结构体;

代码语言:javascript
复制
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单元结构体

定义和创建:特点就是没有字段所以可以在需要实现一个特性但不想存储类型本身的任何数据时使用;

代码语言:javascript
复制
struct Empty;
let x = Empty;
println!("{:p}", &x);
// output:0xca675df588

枚举的定义和使用

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

代码语言:javascript
复制
enum WebEvent {
    PageLoad,                 // 单元结构体
    KeyPress(char),           // 元祖结构体
    Click { x: i64, y: i64 }, // 普通C-Style结构体
}

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

代码语言:javascript
复制
type WE = WebEvent;

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

代码语言:javascript
复制
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编程语言的自定义类型的方式,主要是一些指针语法实在有点拗,下次注意~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结构体的定义和使用
    • 1. C-Style普通结构体:
      • 2. 定义结构体的字段为另一个结构体:
        • 3. Tuple-Style结构体:
          • 4. Unit-Style单元结构体
          • 枚举的定义和使用
          • 总结:
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档