当前位置: 首页 > news >正文

Rust语言初步

文章目录

    • 安装与测试
    • 变量
    • 条件语句和函数
    • 数组和元组
    • 循环

安装与测试

可以从官网直接下载。下载rustup-init并运行之后,会打开命令行,选1默认安装,然后不出意外就安装完了。

安装完成后按照惯例查看一下版本,如不报错就算成功。

>rustc --version
rustc 1.71.1 (eb26296b5 2023-08-03)

然后新建一个文件main.rs,rust中单行注释用//,多行注释用/**/。

/*此文件为main.rs
单行注释用//,多行注释用/**/
println打印字符串,加上!会自动换行*/
fn main() {println!("Hello, world!");
}

然后在命令行中通过rustc编译成可执行文件,就可以运行了。

>rustc main.rs
>main.exe
hello world

变量

rust通过let声明变量,默认情况下,变量的值不可更改,所以下面第二行代码就报错了。

let a = 1;    //声名一个变量
a = 2;        //报错 cannot assign twice to immutable variable

如果想新建一个可以变的变量,需要用到关键字mut

let mut a = 1;
a = 2; 
println!("{}", a);  //输出为2,{}可把a转为字符串

但Rust是强类型语言,变量不可跨数据类型

let mut a = 1;
a = 1.1;    //报错,整数不能变浮点

a在创建时,尽管未说明类型,但被自动推导为整型,所以无法变成浮点数。Rust中整型包括有符号和无符号两类,每一类都有8, 16, 32, 64和128位五种。例如

let a:u32 = 25;     //a为无符号32位整型

此外,还有isizeusize,将根据计算机架构自动选择32位或者64位。

除了整型之外,还有以下数值类型

  • 浮点类型有32位和64位,用f32, f64表示,默认为64位。
  • 布尔型用bool表示,
  • 字符型用char标识,字符类型长度为4字节。
  • never类型用!表示,即无返回类型,类似于void

条件语句和函数

rust中,条件语句用if, else,判断条件无需用括号(),代码段必须加{}。函数用fn声明,如有传入参数或返回值,都需要声明数据类型。

根据这两条规则,可以写一个阶乘函数

fn fac(x:i32)->i32{if x>1{return x*fac(x-1);}else{return 1;}
}fn main(){let x = fac(5);println!("5!={}",x);
}

测试为

>rustc main.rs
>main.exe
5!=120

在rust中,return a;可以简写为a。所以上面的阶乘函数可以简写为

fn fac(x:i32)->i32{if x>1{x*fac(x-1)} else{1}
}

这就显得略酷,在rust中,任何{}包含的程序块,只要最后一行是一个表达式(不以分号结尾),则这个表达式的结果就是程序块的返回值。

fn test_block(){let x ={let y=1;y+2};println!("{}",x);       //输出为3
}
fn main(){test_block();
}

于是很自然地,在rust支持三元表达式

fn test_tri(x:i32){let x = if x>5 {1} else {0};println!("{}",x);
}
fn main(){test_tri(4);     //输出为0test_tri(6);     //输出为1
}

数组和元组

rust中,数组用[]表示,例如

let a = [1,2,3];

由于rust是强类型,创建数组会自动进行类型推断,这个过程当然也可以手动

let a : [i32 ; 3] = [1,2,3]; //声明a由3个i32构成

若想新建一个自然数列,其实有更简单的办法,例如

let a = 1..5;       //0,1,2,3,4

和数组相比,元组中允许放入不同的数据类型,由()括起。

let tup: (i32, f64, u8) = (500, 6.4, 1);

循环

rust中有三种循环,分别是条件循环while;遍历for以及死循环loop

接下来,分别用这三种循环对a进行遍历

fn test_while(){let a : [i32 ; 3] = [1,2,3];let mut i = 0;while i<3{println!("a[{}] = {}", i, a[i]);i += 1;     //即 i = i+1}
}
fn main(){test_while();
}

输出为

>rust main.rs
//由于main.rs中放了很多没用上的函数,所以会被警告
>main.exe
a[0] = 1
a[1] = 2
a[2] = 3

for循环只有遍历的格式,即只能在数组中选择数字循环

fn test_for(){let a : [i32 ; 3] = [1,2,3];for i in a{println("{} ",i);}
}//在mian中调用函数,后不再说明

最后,loop执行的是死循环,只能用break的方式退出。

http://www.lryc.cn/news/217347.html

相关文章:

  • BIMILLC算法源码解析
  • Android STR研究之五
  • python3+requests接口自动化测试实例详细操作
  • 在Node.js中,什么是中间件(middleware)?它们的作用是什么?
  • 当函数参数为一级指针,二级指针
  • Hydra post登录框爆破
  • 阿里云推出AI编程工具“通义灵码“;生成式 AI 入门教程 2
  • 使用Qt Installer Framework将自己的程序打包成安装包程序
  • 逆袭Flutter? Facebook 发布全新跨平台引擎 Hermes!
  • c++ 互斥锁使用详解 lock_guard
  • 【快速解决】Android Button页面跳转功能
  • C语言 pthread_create
  • 前端uniapp提交表单调用接口方法最新
  • OpenFeign的简单介绍和功能实操
  • webpack 高级
  • OLE DB 访问接口所需的(最大)数据长度为 18,但返回的数据长度为 6。
  • oracle (9)Storage Relationship Strut
  • React 项目结构小结
  • 4.网络之TCP
  • 电池原理与分类
  • Mongoose 开源库--Filesystem(文件系统)使用笔记
  • 新兴初创企业参展招募
  • 【Linux】Nginx安装使用负载均衡及动静分离(前后端项目部署),前端项目打包
  • 银行和金融企业为何青睐这8款项目管理工具
  • 一分钟理解npm run dev 和 npm run serve
  • HTTP 协议请求头 If-Match、If-None-Match 和 ETag
  • DAY42 1049.最后一块石头的重量II + 494.目标和 + 474.一和零
  • uniapp原生插件之安卓华为统一扫码HMS Scan Kit
  • 数模国赛——多波束测线问题模型建立研究分析
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)