变量

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类型、字符。没有字符串类型!

标量

整数

整数包括有符号整数和无符号整数,类型用 iu 加上位数表示,特别的 isizeusize表示架构类型,在32位系统中,表示i32u32,在64位系统中表示i64u64

![![05 学习笔记/rust/03 语法规则/#^Table]]Rust 的整数有意思的地方在于写字面值时,可以在中间加 _,比如 1_0001000 是一样的。

需要注意的是对于整数溢出,如果是debug时,程序会直接调用panic! 进行中断,当release时,程序会根据位数进行截断,比如255+1==0

浮点数

浮点数只有两种: f32f64 分别表示单精度和双精度小数,Rust 默认使用 f64

注意: 没有fsize 类型!

bool

布尔型有 truefalse 两个值,没什么好说的。

字符

字符类型是 char类型,是unicode 类型,可以表示unicode 字符集。

数学运算

Rust 支持加减乘除、求余等基础运算。这里没有介绍运算时的单位转换。

复合类型

主要有两种复合类型: tuplearray 。这两种类型都是简单复合类型

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)
    }
}
  • 打赏
  • 分享
分享到...
请选择打赏方式
  • 微信
  • 支付宝

By yhl

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注