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

【Rust】快速教程——冻结表达式

前言

以前谁是魔我杀谁,现在我杀谁谁就是魔。——《拔魔》


\;\\\;\\\;

目录

    • 前言
    • Rust基本知识
      • 结构体
      • 元组+结构体
      • 局部作用域
      • 冻结
      • 字面量
      • Vec元素的类型由第一个push进的类型确定
      • type别名
      • from和into
      • TryFrom和TryInto
    • 表达式

Rust基本知识

结构体

#[derive(Debug)]
struct Window_table{width : i32,height : i32,position : (i32,i32),id : i32,name :String,
}fn main(){let W=1920;let H=1080;let a = Window_table{width : 960,height : 600,position : (W/2-480,H/2-300),id : 0x0000_0000_0000_00ff,  //255name : String::from("new win")};println!("{:#?}",a);
}

在这里插入图片描述

元组+结构体

struct Color(u8,u8,u8); //3个字节
struct Point(f64,f64);  //16个字节fn main(){let a=Color(166,70,70);println!("a=({},{},{})",a.0,a.1,a.2);let a=Point(400.0,300.0);println!("a=({},{})",a.0,a.1);
}

在这里插入图片描述

局部作用域

目前这个例子还是和其他的语言一样,没什么特殊的。

fn main() {let a = 1;{let b = 2;println!("b={}", b);let a = 5_f32;println!("a={}", a);}println!("a={}", a);let a = 'a'; //shadowingprintln!("a={}", a);
}

在这里插入图片描述

冻结

fn main() {let mut a = 7i32;{let a = a;//a = 50; //报错,因为外部可变的a被内部不可变的a冻结了!}a = 3;
}

字面量

对于没有表明类型的整数,编译器默认是i32;对于没有表明类型的浮点数,编译器默认是f64

fn main() {let x = 117u8;let y = 20u32;let z = 3.1f32;let i = 5;let f = 3.1415;println!("size of `x` in bytes: {}", std::mem::size_of_val(&x));println!("size of `y` in bytes: {}", std::mem::size_of_val(&y));println!("size of `z` in bytes: {}", std::mem::size_of_val(&z));println!("size of `i` in bytes: {}", std::mem::size_of_val(&i));println!("size of `f` in bytes: {}", std::mem::size_of_val(&f));
}

在这里插入图片描述

Vec元素的类型由第一个push进的类型确定

fn main() {let a = 5u8;let b=String::from("Hello");let c:u8 = 1;let mut v = Vec::new();v.push(a);//v.push(b); //错误,因为类型被确定成u8了v.push(c);println!("{:?}", v);
}

在这里插入图片描述

type别名

//别名用type
type T1 = u64;
type T2 = u64;
type u8_ = u64;fn main() {let a: T1 = 5 as u8_;let b: T2 = 2 as u8_;println!("{} a + {} b = {} unit?", a, b, a + b);
}

在这里插入图片描述

from和into

from函数就是把传入类型转换成自定义的类型,通过是把传入数据赋值给自定义类型的属性

use std::convert::From;#[derive(Debug)]
struct Number {value: i32,
}impl From<i32> for Number {fn from(item: i32) -> Self {Number { value: item }}
}fn main() {let num = Number::from(30);println!("num={:?}", num);let a = 5;let b: Number = a.into();println!("b={:?}", b);
}

在这里插入图片描述

TryFrom和TryInto

和from、into一样,但是带错误处理

use std::convert::TryFrom;
use std::convert::TryInto;#[derive(Debug, PartialEq)]
struct EvenNumber(i32);impl TryFrom<i32> for EvenNumber {type Error = ();fn try_from(value: i32) -> Result<Self, Self::Error> {if value % 2 == 0 {Ok(EvenNumber(value))  //传入偶数就返回自定义类型} else {Err(())  //传入奇数就报错}}
}fn main() {assert_eq!(EvenNumber::try_from(8), Ok(EvenNumber(8))); //ok=okassert_eq!(EvenNumber::try_from(5), Err(()));           //err=errlet a: Result<EvenNumber, ()> = 8i32.try_into();  //和a.into()的用法一样assert_eq!(a, Err(()));            //ok!=errlet a: Result<EvenNumber, ()> = 5i32.try_into();assert_eq!(a, Err(()));            //err=err
}

在这里插入图片描述

\;\\\;\\\;

表达式

fn main() {let x = 5u32;let y = {let a = x * x;let b = a * x;//返回值不需要分号,意味着最后一句的结果默认是外面接收的b + a + x};let z = {   2 * x;};println!("x is {:?}", x);println!("y is {:?}", y);println!("z is {:?}", z);
}

在这里插入图片描述

表达式最后一句加了分号就表示没有返回值
在这里插入图片描述

相关文章:

  • 2.c++基础语法
  • OceanMind海睿思数据中台迎来重磅更新,使用体验全面提升!
  • Android 工厂模式距离传感器逻辑优化
  • GFS分布式文件系统
  • 波卡三季度报告:已实现白皮书目标,异步支持与应用链技术推进
  • 【Mysql系列】Mysql基础篇
  • 网络超时检测-11.9
  • 小米手环8pro重新和手机配对解决办法
  • 在Linux安装Nginx Proxy Manager并结合内网穿透工具实现远程访问管理界面
  • vscode+python开发之虚拟环境和解释器切换
  • git push 报错 The requested URL returned error: 500
  • 回顾——自我监督的 Vision Transformer 学到了什么?
  • CTFhub-RCE-过滤目录分隔符 /
  • 【owt】owt-p2p的vs工程构建
  • Mindomo Desktop for Mac(免费思维导图软件)下载
  • 收藏网友的 源程序下载网
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 30天自制操作系统-2
  • docker python 配置
  • download使用浅析
  • ES6 ...操作符
  • golang中接口赋值与方法集
  • JavaScript设计模式与开发实践系列之策略模式
  • js中的正则表达式入门
  • leetcode-27. Remove Element
  • Nacos系列:Nacos的Java SDK使用
  • ReactNativeweexDeviceOne对比
  • React-redux的原理以及使用
  • React组件设计模式(一)
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 计算机在识别图像时“看到”了什么?
  • 驱动程序原理
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 《天龙八部3D》Unity技术方案揭秘
  • Hibernate主键生成策略及选择
  • zabbix3.2监控linux磁盘IO
  • 数据库巡检项
  • #NOIP 2014#Day.2 T3 解方程
  • $.ajax()
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (9)STL算法之逆转旋转
  • (C++20) consteval立即函数
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (转)程序员技术练级攻略
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .NET MVC之AOP
  • .NET NPOI导出Excel详解
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 材料检测系统崩溃分析
  • .NET6实现破解Modbus poll点表配置文件
  • .NET企业级应用架构设计系列之开场白
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作