- 可以用
rustc
来编译单个.rs
后缀的文件,用法类似gcc,要求该文件必须有main函数,编译后就是一个二进制文件;大多数情况rust项目用cargo来管理,cargo run
的作用是调用rustc来编译.rs
文件的同时增加了很多参数,把生成的二进制文件放在./target
文件夹中,最后运行生成的二进制文件; - 2.2节讲了如何声明变量,这部分比较基础;
- 2.3节讲了数字的一些语法,用的较多的可能是结构化输出数字的
{}
中的一些用法,例如{:>5b}
表示向右对齐,宽度为5,输出二进制,详细用例见rust_by_example, print; - 数字直接有多种类型,不同类型不能直接比较,可以通过
.into()
或者.try_into()
方法来要求编译器做出相应转换;浮点数的比较由于计算机二进制表达限制的原因可能会产生错误,因此f32/f64
等类型仅仅实现了std::cmp::PartialEq
特征,而其他的数字类型还实现了std::cmp::Eq
特征,在实际应用中应尽量避免浮点数的比较,或者采用a-b < e
这种模式来确保误差在可允许的范围内; - 2.4节讲了控制流的一些常用关键字,如
for, while, loop
等;if else
和match
的使用,match
的pattern匹配功能,有关match的常见用法也可以见rust_by_example, match; - 2.7节通过实现一个
Mandelbrot set
,也就是画一个图像来复习前面的结构化输出、match匹配等的功能, - 2.8节讲了稍微复杂一点的函数声明,包括带有生命周期的函数,注意生命周期压制效应,
<'a:'b, 'b>
表示’a的生命周期不短于’b的生命周期,具体例子可见rust_by_example, lifetime_coercion;也讲了带模板参数T的函数声明; - 2.9节通过一个简化版的grep项目
grep-lite
复习了for
循环的方法,捎带讲了rust语言中不同的字符串类型的区别以及用途,包括char, [u8], Vec<u8>, std::ffi::OSString, std::path::Path
,重点讲了String和str,&str
的区别; - 2.10节讲了array与vector两种数组的区别,也引入了切片(slices)的概念,通常数组切片([T])或者切片引用(&[T])都被称为切片,数组(array)和切片的签名有着明显的区别,数组([T; n]),切片([T]),进一步说明数组是在栈上的数据结构,它的大小在编译时已经确定;
- 2.11节讲了如何引入第三方代码库,可以通过
cargo add {some_crate}
,也可以在cargo.toml
里添加对应的库,这里添加库可以更加灵活,比如制定库的版本或者部分feature等等,具体看cargo reference; - 2.11节还介绍了在项目根目录下使用
cargo doc
来创建项目文档,生成的文档位于./target/doc/{project_name}/index
;同时简单介绍了rustup这个工具,cargo管理项目,rustup管理rust工具链并允许用户使用不同的Rust编译器版本,输入rustup doc
可以在本地浏览器中打开离线版的rust使用文档,关于rustup的使用指南可以看rustup-guide; - 2.12节介绍了一个有用的第三方库
clap
用于处理命令行输入的参数,从此可以定制某些参数,以及库的使用说明,clap的文档在docs.rs/clap里;书中的clap版本是2,目前已经到了^4版本,所以有些api应该是弃用了,需要重新看文档学习; - 2.13节介绍了文件IO的方法,标准库里的
std::fs::File
以及std::io::BufReader
是常用的文件IO库,还有从标准输入获取输入的方法std::io::stdin
;
Rust in Action笔记 第二章 rust语言基础
猜你喜欢
转载自blog.csdn.net/Mint2yx4/article/details/130991016
今日推荐
周排行