从零开始的Rust生活:02-函数
函数是什么
相信各位学Rust的读者应该多少接触过至少一门程序语言,不过这里我还是会按照我的理解尽可能的去为函数做一个相对更为简单的定义。
对于Rust来说,函数的意义与大多数的程序语言都很相似,我们可以将其视作程序中的一个功能模块。这个功能模块可以对一些我们会反复使用的代码进行封装,从而大幅度简化程序的开发过程。
Rust的函数长什么样
Rust中声明一个函数需要用到fn
关键字,通常一个函数的样子形如 1
2
3fn func(arg1: T1, arg2: T2) -> T{
//do something
}func()
就是喜闻乐见的函数名,而T
则对应的是他的返回类型,括号里面则是函数需要传入的参数,类比到C++可以就像下面这样 1
2
3T func(T1 arg1, T2 arg2){
//do something
}1
2
3fn func() -> T{
//do something
}1
2
3fn func(arg1:T){
//do something
}return
返回一个值,就像这样 1
2
3fn return_one() -> i32{
return 1;
}1
2
3
4fn mul(x: i32, y:i32) -> i32{
let t = x * y;
t
}t
后面并没有;
,但是我们又知道Rust每行代码最后必然会有;
。而在一个有返回值的函数中,通常这样的写法会出现在整个函数的末尾,他的含义等价于return t;
。
另外,Rust不止可以返回一个确定的变量,其同样可以将一个表达式作为返回值,就像下面这样 1
2
3fn mul(x:i32, y:i32) -> i32{
x * y
}mul()
,但是它并没有声明一个中间变量t
,而是选择直接返回x*y
,这样的行为在Rust中是合法的,它同样可以实现目标功能而不会出现任何不可预期的问题。
关于闭包
Rust中也存在着一个类似于很多语言中所存在的lambda的存在,那就是闭包。
闭包本质上是一个匿名的函数,其被广泛应用于Rust的多线程处理中,本节中不会讨论闭包,因为在整个Rust学习的前期闭包基本不会被提到。