当前位置:网站首页>Rust从入门到精通06-函数

Rust从入门到精通06-函数

2022-08-11 08:16:00 51CTO

1、函数简介

①、Rust 的函数使用关键字 fn 开头,函数名称使用snake case规范风格(所有字母小写并使用下划线分隔);

②、可以有一系列的输入参数,可以有一个返回值;

③、函数返回可以使用 return 语句,也可以使用表达式(末尾不带分号);

④、函数也可以不写返回类型,这种情况下,编译器会认为返回类型是unit();

⑤、可执行程序的入口是 fn main();

⑥、调用函数时,Rust不关心函数定义在哪(前后都无所谓),只要定义了就行;

⑦、Rust 函数体内可以定义其它模块,比如静态变量、常量、函数、trait、类型等。

2、函数实例

      
      
fn main() {
let num = add(1,2);
println!("{}",num)
}

fn add(x:i32,y:i32) -> i32{
x+y
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

3、函数返回值

需要注意语句和表达式的区别,表达式没有分号,有返回值。语句结尾有分号,没有返回值。

所以对于如下函数,如果函数体加上分号,则会报错:

      
      
fn add(x:i32,y:i32) -> i32{
x+y;
}
  • 1.
  • 2.
  • 3.

Rust从入门到精通06-函数_静态变量

把 x+y; 变成表达式即可(去掉末尾的分号)。

4、发散函数

Rust 支持一种特殊的发散函数(Diverging functions),它的返回类型是感叹号 !。 如果一个函数根本就不能正常返回,那么它就可以这样写:

      
      
fn diverges() -> !{
//panic! 会直接导致栈展开,所以这个函数调用后面的代码都不会执行,它的返回类型就是!
panic!("函数不能返回");
}
  • 1.
  • 2.
  • 3.
  • 4.

发散函数的最大特点:可以被转换成任意一个类型。

在Rust 中,有下列情况返回类型都是 !:

1.panic! 以及基于它实现的各种函数/宏,比如unimplemented!、unreachable! 2.死循环loop{} 3.进程退出函数std::process::exit以及类似的libc 中的exec一类函数。

5、const fn

函数可以用 const 关键字修饰,这样的函数可以在编译阶段被编译器执行,返回值也被视为编译期常量。

需要注意的是:const 函数是在编译阶段执行的,因此相比普通函数有很多限制,并非所有的表达式和语句都可以在其中使用。

而且这个功能还没有完全稳定。


原网站

版权声明
本文为[51CTO]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_12749768/5565559