文章目录
一、思维导图
- Rust 中的语法可以分成两大类:语句(Statement)和表达式(Expression)。语句是指要执行的一些操作和产生副作用的表达式。表达式主要用于计算求值。语句又分为两种:声明语句(Declaration statement)和表达式语句(Expression statement)。

二、案例演示 - 测试求和函数
(一)在CentOS上操作
1、创建项目 - test_func
-
执行命令:
cargo new --bin test_func

-
进入项目
test_func

2、修改主程序 - main.rs
- 执行命令:
vim src/main.rs

// extern crate std; // 声明语句,导入std标准库
// use std::prelude::v1::*; // 导入std库里的prelude模块
fn main() {
pub fn answer() -> () {
let a = 100;
let b = 150;
assert_eq!(sum(a, b), 250);
println!("{} + {} = {}", a, b, sum(a, b));
}
pub fn sum(a: i32, b: i32) -> i32 {
a + b // 作为函数返回值,跟scala语言类似
}
answer();
}
3、运行程序,查看结果
- 执行命令:
cargo run

(二)在VSCode里操作
- 启动VSCode,打开
D:\rust_work文件夹

- 打开控制台

1、创建项目 - test_func
- 执行命令:
cargo new --bin test_func

- 进入项目
test_func

2、修改主程序 - main.rs
- 在
src目录里的主程序main.rs里编写代码

// extern crate std; // 声明语句,导入std标准库
// use std::prelude::v1::*; // 导入std库里的prelude模块
fn main() {
pub fn answer() -> () {
let a = 100;
let b = 150;
assert_eq!(sum(a, b), 250);
println!("{} + {} = {}", a, b, sum(a, b));
}
pub fn sum(a: i32, b: i32) -> i32 {
a + b // 作为函数返回值,跟scala语言类似
}
answer();
}
3、运行程序,查看结果
(1)命令方式
- 执行命令:
cargo run

(2)菜单方式
- 在程序编辑区单击右键,弹出快捷菜单,选择【Run Code】


(三)对代码进行解释
1、导入包与模块
- 第1行和第2行是声明语句,它们并不需要求值,只是用来引入标准库包以及
prelude模块的。之所以注释掉,因为Rust会为每个crate都自动引入标准库模块,除非使用#[no_std]属性明确指定了不需要标准库。
2、如何定义函数
- 使用
fn关键字定义了两个函数answer和sum。关键字fn是function的缩写。 - 函数
answer没有输入参数,并且返回值为单元类型()。单元类型拥有唯一的值,就是它本身,为了描述方便,将该值称为单元值。 - 单元类型的概念来自
OCmal,它表示“没有什么特殊的价值”。所以,这里将单元类型作为函数返回值,就表示该函数无返回值。当然,通常无返回值的函数默认不需要在函数签名中指定返回类型。 - 在函数
answer中,使用let声明了两个变量a和b,其后必须加分号。assert_eq!则是宏语句,它是Rust提供的断言,允许判断给定的两个表达式求值结果是否相同。像这种名字以叹号结尾,并且可以像函数一样被调用的语句,在Rust中叫作宏。 - 编写代码时,会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新起用断言。
- 函数
sum的两个输入参数和返回值均指定为i32类型。其函数体只包含了一个表达式,用于计算a与b的和,作为函数返回值。 - 整个程序其实可以去掉换行符,完全写成一整行代码,而不影响程序编译。
3、程序运行说明
- Rust编译器在解析代码的时候,如果碰到分号,就会继续往后面执行;如果碰到语句,则执行语句;如果碰到表达式,则会对表达式求值,如果分号后面什么都没有,就会补上单元值
()。 - 当遇到函数的时候,会将函数体的花括号识别为块表达式(Block Expression)。块表达式是由一对花括号和一系列表达式组成的,它总是返回块中最后一个表达式的值。因此,对于
answer函数来说,它也是一个块表达式,块中的最后一个表达式是宏语句,所以返回单元值()。对于sum函数来说,其最后一行是一个表达式,因为没有分号,所以直接返回其求值结果。 - 从这个角度来看,可以将Rust看作一切皆表达式。由于当分号后面什么都没有时自动补单元值
()的特点,我们可以将 Rust 中的语句看作计算结果均为()的特殊表达式。而对于普通的表达式来说,则会得到正常的求值结果。
三、Scala语言完成同样任务
- 在
net.hw.func包里创建TestFunc单例对象

- 运行程序,查看结果

四、Python语言完成同样任务
- 创建
test_func.py程序

- 运行程序,查看结果

五、Java语言完成同样任务
- 在
net.huawei.test包里创建TestFunc类

- 运行程序,查看结果

六、C语言完成同样任务
- 编写
test_func.c程序

- 运行程序,查看结果

- 修改程序,让断言失败

本文详细介绍了在Rust中创建和运行测试求和函数的步骤,同时对比了CentOS和VSCode环境下的操作,并扩展到Scala、Python、Java和C语言实现,旨在展示不同编程语言在实现相似功能时的异同。
2276

被折叠的 条评论
为什么被折叠?



