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

Rust语言入门小结(第1篇)

Rust是一种新兴编程语言,既有高级语言的风格,又有底层语言级别的性能;是对于实时性、安全性要求高的应用开发的理想语言。
笔者的自学记录,供参考

环境搭建与第一个Rust程序

  1. 以Linux环境为例
# 下载并安装
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
# 更新
rustup update
# 检查安装是否成功
rustc -V
  1. Rust语言的包管理工具–cargo
# 新建world_hello工程
cargo new world_hello
# 运行的第一种方式
cargo run
# 第二种方式
cargo build
./target/debug/<bin>
# 编译出高性能代码
cargo run --release
# 更快地验证代码的正确性
cargo check
  1. 初识Rust语言
    打开main.rs文件,
fn greet_world() {let southern_germany = "Grüß Gott!";let chinese = "世界,你好";let english = "World, hello";let regions = [southern_germany, chinese, english];for region in regions.iter() {println!("{}", &region);}
}fn main() {greet_world();
}

下面的示例,展示了一些Rust的特性,你会发现类似C\Python的风格。

fn main() {let penguin_data = "\common name,length (cm)Little penguin,33Yellow-eyed penguin,65Fiordland penguin,60Invalid,data";let records = penguin_data.lines();for (i, record) in records.enumerate() {if i == 0 || record.trim().len() == 0 {continue;}// 声明一个 fields 变量,类型是 Vec// Vec 是 vector 的缩写,是一个可伸缩的集合类型,可以认为是一个动态数组// <_>表示 Vec 中的元素类型由编译器自行推断,在很多场景下,都会帮我们省却不少功夫let fields: Vec<_> = record.split(',').map(|field| field.trim()).collect();if cfg!(debug_assertions) {// 输出到标准错误输出eprintln!("debug: {:?} -> {:?}",record, fields);}let name = fields[0];// 1. 尝试把 fields[1] 的值转换为 f32 类型的浮点数,如果成功,则把 f32 值赋给 length 变量//// 2. if let 是一个匹配表达式,用来从=右边的结果中,匹配出 length 的值://   1)当=右边的表达式执行成功,则会返回一个 Ok(f32) 的类型,若失败,则会返回一个 Err(e) 类型,if let 的作用就是仅匹配 Ok 也就是成功的情况,如果是错误,就直接忽略//   2)同时 if let 还会做一次解构匹配,通过 Ok(length) 去匹配右边的 Ok(f32),最终把相应的 f32 值赋给 length//// 3. 当然你也可以忽略成功的情况,用 if let Err(e) = fields[1].parse::<f32>() {...}匹配出错误,然后打印出来,但是没啥卵用if let Ok(length) = fields[1].parse::<f32>() {// 输出到标准输出println!("{}, {}cm", name, length);}}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SQL,HQL刷题,尚硅谷
  • 【MySQL】字符串函数的学习
  • 使用代理IP有风险吗?如何安全使用代理IP?
  • STM32 硬件随机数发生器(RNG)
  • GNU C和标准C
  • Redis(十三)缓存双写一致性策略
  • 在Ubuntu22.04上部署ComfyUI
  • 【51单片机】外部中断和定时器中断
  • 【数据结构】链表OJ面试题5(题库+解析)
  • Java异常处理 throw和throws
  • 黄金交易策略(Nerve Knife):反趋势锁定单的处理机制
  • RISC-V指令格式
  • 2024.2.5 vscode连不上虚拟机,始终waiting for server log
  • 极值图论基础
  • C#的Char 结构的像IsLetterOrDigit(Char)等常见的方法
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 2018一半小结一波
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • JavaScript中的对象个人分享
  • Java多线程(4):使用线程池执行定时任务
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • passportjs 源码分析
  • Promise面试题,控制异步流程
  • socket.io+express实现聊天室的思考(三)
  • Theano - 导数
  • vue-router 实现分析
  • Vultr 教程目录
  • 编写符合Python风格的对象
  • 复杂数据处理
  • 前端存储 - localStorage
  • 学习HTTP相关知识笔记
  • 一个JAVA程序员成长之路分享
  • 原生Ajax
  • AI算硅基生命吗,为什么?
  • postgresql行列转换函数
  • ​Python 3 新特性:类型注解
  • #传输# #传输数据判断#
  • (1)虚拟机的安装与使用,linux系统安装
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (笔试题)分解质因式
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (南京观海微电子)——COF介绍
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (四) 虚拟摄像头vivi体验
  • (转载)虚函数剖析
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .net FrameWork简介,数组,枚举
  • .NET 反射 Reflect
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值