当前位置: 首页 > article >正文

通过例子学 rust 个人精简版 3-1

3-1

自定义类型
Rust 自定义数据类型主要是通过下面这两个关键字来创建:

struct: 定义一个结构体(structure)
enum: 定义一个枚举类型(enumeration)

而常量(constant)可以通过 conststatic 关键字来创建。
结构体
#[derive(Debug)]
struct Person {
    name: String,
    age: u8,
}

// 单元结构体
struct Unit;

// 元组结构体
struct Pair(i32, f32);

// 带有两个字段的结构体
struct Point {
    x: f32,
    y: f32,
}

// 结构体可以作为另一个结构体的字段
#[allow(dead_code)]
struct Rectangle {
    // 可以在空间中给定左上角和右下角在空间中的位置来指定矩形。
    top_left: Point,
    bottom_right: Point,
}

fn main() {
    // 使用简单的写法初始化字段,并创建结构体
    let name = String::from("Peter");
    let age = 27;
    let peter = Person { name, age };

    // 以 Debug 方式打印结构体
    println!("{:?}", peter);

    // 实例化结构体 `Point`
    let point: Point = Point { x: 10.3, y: 0.4 };

    // 访问 point 的字段
    println!("point coordinates: ({}, {})", point.x, point.y);

    // 使用结构体更新语法创建新的 point,
    // 这样可以用到之前的 point 的字段
    let bottom_right = Point { x: 5.2, ..point };

    // `bottom_right.y` 与 `point.y` 一样,因为这个字段就是从 `point` 中来的
    println!("second point: ({}, {})", bottom_right.x, bottom_right.y);

    // 使用 `let` 绑定来解构 point
    let Point { x: left_edge, y: top_edge } = point;

    let _rectangle = Rectangle {
        // 结构体的实例化也是一个表达式
        top_left: Point { x: left_edge, y: top_edge },
        bottom_right: bottom_right,
    };

    // 实例化一个单元结构体
    let _unit = Unit;

    // 实例化一个元组结构体
    let pair = Pair(1, 0.1);

    // 访问元组结构体的字段
    println!("pair contains {:?} and {:?}", pair.0, pair.1);

    // 解构一个元组结构体
    let Pair(integer, decimal) = pair;

    println!("pair contains {:?} and {:?}", integer, decimal);
}
要点1 : 元组结构体 单元结构体
要点2 : 结构体解构
要点3 : 结构体点字段访问法 元组结构体 与 元组访问法一样
要点4 : 在声明语法中 ..结构体 可以继承其他可以继承的字段内容 
// 动手试一试
struct Point {
    x: f32,
    y: f32,
}
struct Rectangle {
    top_left: Point,
    bottom_right: Point,
}
fn rect_area(rect: Rectangle) -> f32 {
    let Rectangle {
        top_left: Point { x: x1, y: y1 },
        bottom_right: Point { x: x2, y: y2 },
    } = rect;

    let width = (x2 - x1).abs(); // 取绝对值,确保宽度为正
    let height = (y2 - y1).abs(); // 取绝对值,确保高度为正

    width * height
}
// 动手试一试
struct Point {
    x: f32,
    y: f32,
}
struct Rectangle {
    top_left: Point,
    bottom_right: Point,
}
// 返回一个以给定点为左上角,边长为指定值的正方形 Rectangle
fn square(top_left: Point, side_length: f32) -> Rectangle {
    Rectangle {
        top_left: Point {
            x: top_left.x,
            y: top_left.y,
        },
        bottom_right: Point {
            x: top_left.x + side_length,
            y: top_left.y + side_length,
        },
    }
}

http://www.kler.cn/a/553544.html

相关文章:

  • 【系统架构】分布式事务模型详解
  • 配置终端代理
  • 精准医疗的“柔性”助力:FPC在医疗机器人中的应用实例【新立电子】
  • 启元世界(Inspir.ai)技术浅析(七):AI Beings 平台
  • AI照片管理利器实战:自动化分类+智能搜索+远程访问一站式解决方案
  • 基于Springboot的公寓报修管理系统【附源码】
  • 用DeepSeek零基础预测《哪吒之魔童闹海》票房——从数据爬取到模型实战
  • 【探索PHP的无限可能:构建高效、动态的Web应用】
  • 机器学习:十大算法实现汇总
  • EasyExcel实现excel导入(模版上传)
  • 处理 Markdown 转换过程中损坏的 PDF 文件
  • 机器学习(1)安装Pytorch
  • 如何排查服务器日志中出现的可疑行为
  • [实现Rpc] 消息类型的测试 | dynamic_pointer_cast | gdb使用
  • 如何安装Hadoop
  • Unity 与 Mosquitto MQTT Broker 通信教程
  • TypeScript 中的 type 和 interface:你真的了解它们的不同吗?
  • React之旅-02 创建项目
  • 使用Druid连接池优化Spring Boot应用中的数据库连接
  • vite调试node_modules下面插件