let var = if something { 1 } else { 2 };
这里的花括号是必需的 。

文章插图
类型Rust的类型有两种:基本数据类型(数字、str),结构(String) 。
二者之间唯一的区别是,基本类型的初始化可以直接赋值 , 而复杂类型则需要某种构造函数 。
堆与栈
我之前几乎不需要考虑堆与栈的问题 。(据我所知,JS中的对象都存储在堆中 , 只有基本类型在栈中 。)
堆:
● 速度慢
● 比较大
栈
● 非常快
● 比较小
基本类型和基本的结构都存储在栈中 。要在堆中存贮值,需要使用Box<T> 。另外,Vec<T> 也可以将值保存到堆中 。
如果你使用的内存较多,或者需要在结构中使用带有值的enum,则可能需要使用堆 。
如果发生栈溢出 , 则说明你使用了过多的栈内存 。对于一些较大的值,应该使用Box 。
常见的基本类型
数字:
● i8、i16、i32、i64、i128:有符号整数,包括负数 。数字表示值的比特数 。
● u8、u16、u32、u64、u128:无符号整数,从零开始 。它们的最大容量翻了一倍,因为有一个额外的比特可用(在有符号整数中用于表示符号) 。数字表示值的比特数 。
● f32 和 f64:浮点数 。javascript 世界中常见的数字 。
字符串:
● str:简单的UTF-8 字符串(所有 Rust 字符串都是 UTF-8 。不能使用无效的 UTF-8 字符串,会引发异常或造成panic) 。通常用作指针(即 &str) 。
● String:一种更复杂的类型(严格来说不是基本类型) , 存储在堆中 。
数组:
● T :具有固定长度的数组(如果使用 Option<T> 类型,则数组内包含的元素数量可以小于实际长度) 。
元组
元组可用于存储不同类型的多个值(从本质上来说就是可以容纳不同类型且大小固定的数组) 。
与数组不同,元组可通过点(.)直接访问,例如 tuple.0 表示获取第一项,而 tuples 没有.len 之类的方法 。
let var = (1, "str");有一个很有意思的小技巧,你可以通过(空元组)返回“void” 。既没有 return 语句,也不会返回值的函数会返回 。
常见结构
Option<T>
● 这是一个枚举,值为Some(T) 或 None 。(我们稍后再讨论enum,Rust中的枚举与其他语言略有不同 。)
● 如果想获取该值,你可以使用 match,就像使用其他枚举一样 , 或者使用 .unwrap (如果值为None,则会导致panic) 。
Result<T, E>
● 这个结构与 Option 类似,但常用于处理错误(通常由 IO 方法返回) 。
● 它的值是 Ok(T) 或 Err(E) 。
● 如果想获取该值,你可以使用match 块或 unwrap 。
● 为了方便使用,当函数返回 Result<T, E> 时,可以在返回值为 Result<T, E>(其中E必须为兼容的类型)的方法调用之后使用 ? 来返回错误E(类似于使用.unwrap(),但当函数出错时不会造成panic) 。
fn example -> Result<, Error> { // 一种错误类型 。为了简便起见,你可以使用String,或自定义enum 。 something_that_returns_result?; Ok() // returns empty Tuple}Vec<T>
● 向量是可增长的数组,存储在堆上 。
● 向量支持 .push、.pop 等常用操作 。详情参见Rust文档 。
Box<T>
● 在堆上存储T 。可用于在结构中使用enum , 或者用于释放栈空间 。
定义结构
结构类似于对象 , 但它们的大小是静态的 。
相关经验推荐
- 放弃简约风吧!过年回家这样打扮,时髦贵气,美得好高级
- 大地色真是秋天yyds,宋轶一身大地色高级又甜美,不止显白还显瘦
- 怎么从成品尺寸推算坯布幅宽
- 秦始皇如何从吕不韦手中夺权
- 为什么建议男生多穿阔腿裤?看这几位明星就知道了,显瘦、高级、太时尚,还提气质!
- 女生微信网名高级冷酷 微信网名高冷霸气冷酷女
- 自然人从什么时起享有民事权利
- 盘点微胖女生的显瘦穿搭,掌握2个搭配要点,造型高级又有范
- 丈夫酒驾接妻子下班被抓:明天能从电视上看到我吗?
- 春天一句话 春天一句话精选
