首页 > 其他分享 >rust基础学习

rust基础学习

时间:2022-11-12 20:45:54浏览次数:75  
标签:函数 基础 学习 let rust println 返回值 表达式

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位无符号数
  • 浮点型:有f32f64,默认为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

相关文章

  • Srping AOP的学习(三):AOP的执行过程
    1.说明前面学习了springAOP的简单使用以及代理的一些知识,我们知道AOP的原理主要是使用了动态代理,那么它的具体执行流程又是怎样的呢?下面来使用SpringAOP的学习(一)中的......
  • 30分钟学完Python基础语法
    30分钟学完Python基础语法,有一门面向对象语言的基础,30分钟足够看一遍Python的基础了。基础语法#缩进取代大括号#用换行取代分号,也可以使用分号,无所谓#输出print();#输......
  • 《Unix/Linux系统编程》第十三章学习笔记
    第13章TCP/IP和网络编程摘要本章论述了TCP/IP和网络编程,分为两个部分。第一部分论述了TCP/IP协议及其应用,具体包括TCP/IP栈、IP地址、主机名、DNS、IP数据包和路由器......
  • 学年(2022-2023-1) 学号(20221403)《计算机基础与程序设计》第十一周学习总结
    学期(2022-2023-1)学号(20221403)《计算机基础与程序设计》第十一周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个......
  • 设计模式学习(二十四):Spring 中使用到的设计模式
    设计模式学习(二十四):Spring中使用到的设计模式作者:Grey原文地址:博客园:设计模式学习(二十四):Spring中使用到的设计模式CSDN:设计模式学习(二十四):Spring中使用到的设计模式......
  • 2022-2023-1 20221401 《计算机基础与程序设计》第十一周学习总结
    2022-2023-120221401《计算机基础与程序设计》第十一周学习总结作业信息这个作业属于哪个课程<班级的链接>https://edu.cnblogs.com/campus/besti/2022-2023-1-CFA......
  • C++学习笔记1:类的使用
    [基本数据结构]()[类的使用]()[类的继承和派生]()[面向对象特征之一——多态]()[操作符重载]()[const关键字的使用]()1.类的定义与使用1.1类的定义最简单的类的申明:class......
  • 机器学习模型监控清单
    一旦在生产环境中部署了机器学习模型,就需要确保它的性能。在本文中,我们建议如何监视您的模型和要使用的开源工具。建立机器学习模型并不容易。在生产环境中部署服务更加困难......
  • 20221410 《计算机基础与程序设计》第十一周学习总结
    作业信息|这个作业属于哪个课程|<班级的链接>(https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP))||这个作业要求在哪里|<作业要求的链接>(https://edu.cnblogs.co......
  • 设计模式学习(二十三):中介模式
    设计模式学习(二十三):中介模式作者:Grey原文地址:博客园:设计模式学习(二十三):中介模式CSDN:设计模式学习(二十三):中介模式中介模式中介模式是一种行为型模式。举个简单的例子......