此外,运算符重载会使用trait,但本文不打算详细讨论 。
- 几乎所有的东西都是表达式
你可以直接使用 if 来代替其他语言中常见的三元运算符:
let var = if something { 1 } else { 2 };
循环会根据break的调用返回结果 。你可以利用它,反复重试某个操作,直到成功 。![从高级程序员的角度来看,Rust 基础知识](http://img.jiangsulong.com/220418/1RZ32A6-4.jpg)
文章插图
变量变量通过 let 声明,并且有作用域 。类型是可选的,Rust 非常擅长推断类型(比 Typescript 更出色) 。
let var: usize = 1;
上述变量定义了一个类型为usize的变量var(usize是一个32或64位的数字,具体取决于计算机架构) 。你可以重复声明变量 。当重复声明某个变量时,之前声明的变量就会被删除(除非该变量被引用,在这种情况下只有引用会保留,而原始变量会被删除),而且变量的类型也会改变 。
let var = 1;
let var = "something";
在默认情况下,变量是不可变的 。如果你想修改它们,则需要在 let 之后加上关键字 mut 。let var = 1;
var = 2; // 错误!不可以修改不可变的变量
let mut var = 1;
var = 2;
![从高级程序员的角度来看,Rust 基础知识](http://img.jiangsulong.com/220418/1RZ31Y3-5.jpg)
文章插图
函数
fn main(arg: u8) -> u8 {
// something
arg
}
函数的行为几乎与JS一模一样,只不过它们并不是数据类型,而且语法上略有不同 。参数的指定与 Typescript 类似,即key: type 。返回类型通过 -> 指定 。
有趣的是,虽然 Rust 需要分号,但如果最后一个表达式后面的分号忘写了,它会被作为返回值(即使没有 return 关键字) 。
![从高级程序员的角度来看,Rust 基础知识](http://img.jiangsulong.com/220418/1RZ34416-6.jpg)
文章插图
If语句
if something {
} else {
} else if something_else {
}
if 语句的使用非常基本,不在此赘述 。有一点需要注意,如非必要,使用括号实际上是错误的 。你可以利用括号指定执行顺序:
if (something || something_else) && something_other {}
如前所述,if 也可以返回一个值,而该值可用于赋值、参数、返回或其他地方 。let var = if something { 1 } else { 2 };
这里的花括号是必需的 。![从高级程序员的角度来看,Rust 基础知识](http://img.jiangsulong.com/220418/1RZ34947-7.jpg)
文章插图
类型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");
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 从中医角度看福鼎白茶[养生茶]
- 太阳死亡后会变成 太阳从出生到死亡的过程
- 周杰伦经典歌词分享
- 男人爱冒汗是什么原因
- 月食每年发生几次 我国日食月食记录从哪朝开始
- 火星的5大秘密 从火星上看地球好恐怖
- 各类程序员学习路线图 Get了吗
- 数据库主从不一致,怎么解?
- 如何挑选羊奶?
- 放下从杯茶开始,杯中的茶越发的凉