变量
rust
中对于变量有三种类型: 临时量、可变值、常量。
let x = 4; // 临时值,不能修改,只能重新定义
x = 5; // error!
let x = 5; // success!
let mut x = 4; // 可变值,可以修改
x += 1; // success!
let mut x = 5; // error! ,不能重复定义可变值。
const x : uint32 = 4; // 常量,可以定义在全局或局部,必须是编译器能确定的值。
综合来看, 临时值类似于 c++
的const
变量,可变值类似于c++
的变量,常量类似于c++
的 constexp
变量,但也有一些区别:
临时值允许重新定义,叫作
shadow
的机制,可以用新定义覆盖掉前面的定义,重新定义时可以定义为不同的类型。
数据类型
Rust
的数据类型分为两类: 标量和复合类型。一般开发语言都是如此。
标量包括: 整数、浮点数、bool类型、字符。没有字符串类型!
标量
整数
整数包括有符号整数和无符号整数,类型用 i
和u
加上位数表示,特别的 isize
和usize
表示架构类型,在32
位系统中,表示i32
和u32
,在64位系统中表示i64
和u64
。
![![05 学习笔记/rust/03 语法规则/#^Table]]Rust
的整数有意思的地方在于写字面值时,可以在中间加 _
,比如 1_000
和 1000
是一样的。
需要注意的是对于整数溢出,如果是debug
时,程序会直接调用panic!
进行中断,当release
时,程序会根据位数进行截断,比如255+1==0
浮点数
浮点数只有两种: f32
和f64
分别表示单精度和双精度小数,Rust
默认使用 f64
。
注意: 没有
fsize
类型!
bool
布尔型有 true
和false
两个值,没什么好说的。
字符
字符类型是 char
类型,是unicode
类型,可以表示unicode
字符集。
数学运算
Rust
支持加减乘除、求余等基础运算。这里没有介绍运算时的单位转换。
复合类型
主要有两种复合类型: tuple
和array
。这两种类型都是简单复合类型
tuple
(x, y)
,括号表示,可以使用不同类型,与f#
的 tuple
比较像。
let tu = (2, 3, 4, 5);
let tu: (u32, i32, char, bool) = (1, 2, 'x', true);
let x = tu.0;
let y = tu.1;
let (x, y, z, p) = tu;
array
array
类型类似于 c++
的静态数组,必须长度确定,使用[]
来表示,类型必须相同。复杂应用推荐使用标准库中的vector
。
函数
函数以 fn
标识,参数形式为 (value:type, value2, type2)
,类似于python
等,返回值使用-> type
标识,类似于c++
的后置返回声明。
重点来了:语句和表达式。
在Rust
中一个很重要的概念是表达式。有返回值的是表达式,没有返回值的是语句。表达式不能以;
结尾。
表达式举例:
let x = 5; // 5是个表达式, let x = 5; 是一条语句
// 下面语句中, {} 中的部分是表达式,最后y+1 后面不能跟`;`
let x = {
let y = 2;
y + 1
}
函数的返回值也是同样的,直接放在最后一句,不跟;
即可。也可以用return
,但比较少。
fn test_return() -> u32
{
5
}
fn main()
{
let x = test_return();
}
注释
Rust
使用//
进行单行注释。
没有其他可说的,没有/* */
形式。
控制流
if
if
没什么好说的,条件不需要加括号,不支持自动转换为bool
。可以作为表达式使用, 可以使用else if
作为分支。
let x = 5;
let y = if x > 5 {2} else {3};
loop
基础循环,类似于 while true
,区别在于可以加标签,可以直接退出多层循环,可以通过 break value
在退出循环时返回值。
'xxloop: loop {
'yyloop': loop {
break 'xxloop'; // 直接退出上层循环
}
}
let mut y = 0;
let x = loop {
y += 10;
if (y > 50){
break y *2; // 返回 y*2 给 x
}
}
while
while cond
for
for x in array
作业
1. 转换温度,在华氏度和摄氏度之间转换
// 转换为华氏温度
fn ConvertToFahrenheit(temp: f64) -> f64{
temp * 9.0 / 5.0 + 32.0
}
// 从华氏温度转换为摄氏度
fn ConvertFromFahrenheit(temp: f64) -> f64 {
(temp - 32.0) * 5.0 / 9.0
}
2. nth Fibonacci number
// fibonacci number
fn fib(n: usize) -> usize{
if n < 2
{
1
}
else
{
fib(n - 1) + fib(n - 2)
}
}
- 打赏
- 分享
- 微信
- 支付宝