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

【Rust】快速教程——自定义类型、数字转枚举、Cargo运行

前言

超过一定的年龄之后,所谓人生,无非是一个不断丧失的过程而已。宝贵的东西,会像梳子豁了齿一样从手中滑落下去。你所爱的人会一个接着一个,从身旁悄然消逝。——《1Q84》


\;\\\;\\\;

目录

    • 前言
    • 自定义类型
    • 数字转枚举
      • Cargo.toml
      • main.rs

自定义类型

RUST中没有类,只有结构体。通过实现在结构体中实现固定名称的接口(这个就类似类),接口中有几个固定的函数。

!表示发散函数,可以转换为各种类型

use std::{fmt::Display,ops::Add};//定义一个"包裹"
struct Wrapper(Vec<String>);    //Vec是矢量数组//为结构体实现接口,而不是实现结构体!!!
//接口名Display是固定的
impl Display for Wrapper{fn fmt(&self, f :&mut std::fmt::Formatter<'_>) -> std::fmt::Result{write!(f,"[{}]",self.0.join(", "))   //要返回的,不要分号}
}//定义一个"工具"
struct Tool(u32);//为结构体实现接口,而不是实现结构体!
//接口名Display是固定的
impl Display for Tool{fn fmt(&self,f :&mut std::fmt::Formatter<'_>)->std::fmt::Result{write!(f,"{}",self.0)  //要返回的,不要分号}
}
//为结构体实现接口,而不是实现结构体!
//接口名Add是固定的
impl Add for Tool{//type是重命名type Output = Self;//左边的self是参数,右边的other是固定成Add类型的参数fn add(self,other:Self) -> Self{Self(self.0+other.0)}
}fn my_add(a:Tool,b:Tool)->Tool{a+b    //add函数先前被重载了
}fn main(){//vec![] = Vec::new()let a = Wrapper(vec![String::from("hello"),String::from("world"),String::from("hola"),String::from("mundo")]);println!("a={}",a);let a = my_add(Tool(10),Tool(11));println!("a={}",a);type Tool_t = u32;let b:u32=1;let c:Tool_t=2;println!("{}+{}={}",b,c,b+c);
}

在这里插入图片描述

\;\\\;\\\;

数字转枚举

Cargo.toml

安装两个包,需要用cargo下载。cargo的目录如下:
在这里插入图片描述
main.rs放在src中,Cargo.toml与src同一层,运行的时候进入proj就行了。

使用 cargo run 运行

在这里插入图片描述

Cargo.toml文件

[package]
name="enumToInt"
version="0.1.0"
edition="2021"[dependencies]
num-traits ="0.2.14"
num-derive ="0.3.3"[registries]
ustc={ index="https://mirrors.ustc.edu.cn/crates.io-index" }

main.rs

main.rs文件

use num_traits::FromPrimitive;
use num_derive::FromPrimitive;#[derive(FromPrimitive)]
enum Person{Student=1,Teacher,Staff
}fn main(){//枚举转数字let a=Person::Teacher as u32;//数字转枚举match FromPrimitive::from_u32(a){Some(Person::Student) => println!("[Student]"),Some(Person::Teacher) => println!("[Teacher]"),Some(Person::Staff) => println!("[Staff]"),None => println!("[None]"),}
}

错误:下载还没一半就warning没完没了了

http://www.lryc.cn/news/249964.html

相关文章:

  • python 实现 AIGC 大语言模型中的概率论:生日相同问题的代码场景模拟
  • SD-WAN组网中的CPE及云服务CPE部署方法
  • 理解BatchNormalization层的作用
  • uniapp实现文件预览过程
  • 深度学习-学习笔记记录
  • 程序员养生之道:延寿不忘初心——延寿必备
  • 使用Docker安装部署Swagger Editor并远程访问编辑API文档
  • Nacos 2.X核心架构源码剖析
  • C语言--每日选择题--Day31
  • chrome vue devTools安装
  • Spring Security 6.x 系列(7)—— 源码分析之Builder设计模式
  • PyQt6 中自定义浮点型滑块类
  • 笔记,B+树
  • 代码随想录刷题题Day2
  • 【JAVA面向对象编程】--- 探索子类如何继承父类
  • 从浏览器控制台发送get,post请求
  • 海外问卷调查怎么批量做?可以用指纹浏览器吗?
  • HarmonyOS 位置服务开发指南
  • ThinkPHP6学生选课管理系统
  • uniapp如何与原生应用进行混合开发?
  • Csharp(C#)无标题栏窗体拖动代码
  • 李宏毅2020机器学习课程笔记(二)- 深度学习
  • 解决电脑蓝屏问题:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED,回到系统还原点
  • connectivity_plus 安卓build的时候报错
  • 系统部署安装-Centos7-Kafka
  • 94.STM32外部中断
  • 【Linux】快速上手自动化构建工具make/makefile
  • HarmonyOS
  • Docker安装Oracle18c 坑已排完,放心食用
  • 2023年第十二届数学建模国际赛小美赛C题雪崩防范求解分析