【用Rust写CAD】第二章 第四节 函数

文章目录


1、 函数基本形式

Rust 函数的基本形式:

rust 复制代码
fn <函数名> ( <参数> ) <函数体>

其中 Rust 函数名称的命名风格是小写字母以下划线分割:

实例

rust 复制代码
fn main() {
    println!("Hello, world!");
    another_function();
}

fn another_function() {
    println!("Hello, runoob!");
}

运行结果:

Hello, world!

Hello, runoob!

注意,我们在源代码中的 main 函数之后定义了another_function。 Rust不在乎您在何处定义函数,只需在某个地方定义它们即可。

2、函数参数

Rust 中定义函数如果需要具备参数必须声明参数名称和类型:

实例

fn main() {

another_function(5, 6);

}

fn another_function(x: i32, y: i32) {

println!("x 的值为 : {}", x);

println!("y 的值为 : {}", y);

}

运行结果:

x 的值为 : 5

y 的值为 : 6

函数体的语句和表达式

Rust 函数体由一系列可以以表达式(Expression)结尾的语句(Statement)组成。到目前为止,我们仅见到了没有以表达式结尾的函数,但已经将表达式用作语句的一部分。

语句是执行某些操作且没有返回值的步骤。例如:

let a = 6;

这个步骤没有返回值,所以以下语句不正确:

let a = (let b = 2);

表达式有计算步骤且有返回值。以下是表达式(假设出现的标识符已经被定义):

a = 7

b + 2

c * (a + b)

Rust 中可以在一个用 {} 包括的块里编写一个较为复杂的表达式:

实例

fn main() {

let x = 5;

let y = {
    let x = 3;
    x + 1
};

println!("x 的值为 : {}", x);
println!("y 的值为 : {}", y);

}

运行结果:

x 的值为 : 5

y 的值为 : 4

很显然,这段程序中包含了一个表达式块:

{

let x = 3;

x + 1

};

而且在块中可以使用函数语句,最后一个步骤是表达式,此表达式的结果值是整个表达式块所代表的值。这种表达式块叫做函数体表达式。

注意:x + 1 之后没有分号,否则它将变成一条语句!

这种表达式块是一个合法的函数体。而且在 Rust 中,函数定义可以嵌套:

实例

fn main() {

fn five() -> i32 {

5

}

println!("five() 的值为: {}", five());

}

函数返回值

在上一个嵌套的例子中已经显示了 Rust 函数声明返回值类型的方式:在参数声明之后用 -> 来声明函数返回值的类型(不是 : )。

在函数体中,随时都可以以 return 关键字结束函数运行并返回一个类型合适的值。这也是最接近大多数开发者经验的做法:

实例

fn add(a: i32, b: i32) -> i32 {

return a + b;

}

但是 Rust 不支持自动返回值类型判断!如果没有明确声明函数返回值的类型,函数将被认为是"纯过程",不允许产生返回值,return 后面不能有返回值表达式。这样做的目的是为了让公开的函数能够形成可见的公报。

注意:函数体表达式并不能等同于函数体,它不能使用 return 关键字。

相关推荐
爱吃生蚝的于勒几秒前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
binishuaio10 分钟前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE12 分钟前
【Java SE】StringBuffer
java·开发语言
就是有点傻16 分钟前
WPF中的依赖属性
开发语言·wpf
洋24025 分钟前
C语言常用标准库函数
c语言·开发语言
进击的六角龙26 分钟前
Python中处理Excel的基本概念(如工作簿、工作表等)
开发语言·python·excel
wrx繁星点点27 分钟前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
NoneCoder44 分钟前
Java企业级开发系列(1)
java·开发语言·spring·团队开发·开发
苏三有春1 小时前
PyQt5实战——UTF-8编码器功能的实现(六)
开发语言·qt
Aniay_ivy1 小时前
深入探索 Java 8 Stream 流:高效操作与应用场景
java·开发语言·python