rust基础学习
rust环境配置
rust在线工具:https://play.rust-lang.org/
如果还没有安装C/C++编译环境,需要先进行安装(可以选择安装visual studio)
Rustup在Windows上是一个可执行程序rustup-init.exe
,运行后是命令行形式,如果已经安装了MSVC,直接输入1并回车即可完成安装。输入下图两个命令进行测试,如果能输出版本号说明安装成功:
在vs code中打开文件夹,选择终端->新建终端,输入cargo new greeting
,就会在该文件夹下生成一个叫greeting的Rust工程目录,展开后可以看到其自动生成了一个hello world程序main.rs
,编译运行效果如下:
rust输出到命令行
rust输出文字的方式主要有两种:println!()
和print!()
,区别在于println!()
会在输出的最后加一个换行符。使用格式为格式字符串,加一串可变参数,对应格式字符串中的"占位符",与C语言的printf
相似,例如:
fn main() {
let a = 12;
println!("a is {}", a); //用{}而不是C语言中的%d
println!("a is {0}, a again is {0}", a);
//在{}之间放一个数字,它将把可变参数当作一个数组来访问,下标从0开始
}
在windows命令行下,要进入.rs
文件所在的目录才能使用rustc
进行编译,编译后生成文件名.exe
文件,直接在命令行输入文件名并回车即可运行
rust基础语法
rust是强类型语言(强制类型定义),但具有自动判断变量类型的能力
let
:声明变量
mut
:使变量成为可变变量
case 1:
let a = 123;
a = 456;//报错,这里a是不可变变量
case 2:
let mut a = 123;
a = 456;//合法,这里a是可变的
重影(shadowing):变量的名称可以被重新使用的机制,也就是同一个名字重新代表另一个变量实体,其类型、可变属性和值都可以变化
因此,不可变变量与常量不同,在于不可变变量可以重影,而常量不可以:
case 1:
let a = 123;
let a = 456;//合法,因为a是变量
case 2:
const a: i32= 123;
let a =456;//不合法,因为a是32位整型的常量
rust数据类型
- 整型:i为有符号,u为无符号,后面的数字代表位数,例如
i32
是32位有符号数,u64
是64位无符号数 - 浮点型:有
f32
和f64
,默认为64位浮点数 - 布尔型:用bool表示
- 字符型:用char表示,大小为4个字节,一般推荐使用字符串储存UTF-8文字
- 元组:用
( )
包括的一组数据,可以包含不同类型的数据 - 数组:用
[ ]
包括,是同类型数据,访问格式与C语言类似
//元组类型
let tup: (i32, f64, u8) = (500, 6.4, 1); //则tup.1=6.4
//数组类型
let a = [1, 2, 3, 4, 5]; //数组a也是不可变的
let b: [i32; 5] = [1, 2, 3, 4, 5]; //长度为5的i32数组
let c = [6;4]; //等价于let c = [6,6,6,6];
let first = a[0]; //数组元素访问
PS: rust不支持++
和--
运算符
rust函数
函数格式:用fn
关键字进行函数的声明,函数名的命名风格是小写字母,用下划线分割
函数参数:需要声明参数的名称和类型,例如fn another_function(x: i32, y: i32)
函数返回值:在参数声明之后用->
声明函数返回值的类型
语句(statement):执行某些操作且没有返回值的步骤,例如let a = 6;
表达式:有计算步骤且有返回值的步骤,例如a+2
,表达式末尾没有分号
rust函数体:由一系列可以由表达式结尾的语句组成
嵌套:rust中,函数的定义可以嵌套,可以在一个函数内定义另一个函数
函数体表达式:一种表达式块,在块中可以使用函数语句,最后一个步骤是表达式,此表达式的结果,就是整个表达式块所代表的值,例如:
{
let x = 3;
x + 1
};
PS:函数体表达式与函数体不同,不能用return关键字
rust不会自动判断返回值的类型,如果没有明确声明函数返回值的类型,函数将被认为是"纯过程",不允许产生返回值。return后面不能有返回值表达式
rust条件语句
if - else
格式支持else if
语法,特殊点有:
- 条件表达式不需要用小括号包括(不是不允许)
- 不存在C/C++中单语句不需要加{}的规则,必须是一个块,也就是不允许用一个语句代替一个块
- 条件表达式必须是bool类型,不允许C/C++中用条件表达式用整数表示,非0即真的规则
if <condition> {block 1} else {block 2}
中,每个block也可以是函数体表达式,注意两个函数体表达式的类型必须一样
rust循环
rust支持while
循环,但没有C语言中用for循环的三元语句控制循环的用法,需要用while
循环代替:
//C语言:
for(int i=0;i<10;i++){
//循环体
}
//rust:
let mut i = 0;
while i < 10 {
// 循环体
i += 1;
}
for
循环是最常用的循环结构,常用来遍历一个线性数据结构(e.g. 数组):
fn main() {
let a = [10, 20, 30, 40, 50];
for i in a.iter() { //a.iter()代表a的迭代器(iterator)
println!("value = {}", i);
}
for i in 0..5 { //for可以通过下标访问数组
println!("a[{}] = {}", i, a[i]);
}
}
loop
:无限循环结构,类似于while(true)
,可以用break
语句退出loop
循环,并给予外部一个返回值
loop
循环常被用来当作查找工具使用:
fn main() {
let s = ['R', 'U', 'N', 'O', 'O', 'B'];
let mut i = 0;
let location = loop { //location可以获得break时的返回值
let ch = s[i];
if ch == 'O' {
break i; //返回值为i
}
i += 1;
};
println!(" \'O\' 的索引为 {}", location);
}
//运行结果为:'O' 的索引为 3
标签:函数,基础,学习,let,rust,println,返回值,表达式
From: https://www.cnblogs.com/CCchaos/p/16884602.html