Rust入门系列第四篇。函数是你命名和复用逻辑的方式。Rust 的函数很简单——关键在于几乎一切都是表达式。
第一个函数#
fn add(a: i32, b: i32) -> i32 {
a + b
}
fn main() {
let result = add(3, 4);
println!("{result}"); // 7
}rust参数声明类型;返回类型写在 -> 后面。
语句与表达式#
语句执行一个动作且不返回任何值。表达式求值为一个值。
fn add(a: i32, b: i32) -> i32 {
let sum = a + b; // 语句,以分号结尾
sum // 表达式,无分号
}rust最后一个表达式——不带分号——就是返回值。如果加上分号,函数就返回 ()。
提前返回#
用 return 提前退出:
fn is_adult(age: u32) -> bool {
if age >= 18 {
return true;
}
false
}rust无返回值#
不产生任何值的函数具有单元类型 ():
fn greet(name: &str) {
println!("Hello, {name}!");
}rust隐式返回类型是 ()。
传递所有权#
默认情况下,把值传给函数会移动它(详见下一篇所有权):
fn print_len(s: String) {
println!("{}", s.len());
}
fn main() {
let s = String::from("hello");
print_len(s); // s 被移动
// println!("{s}"); // 错误:s 已不存在
}rust泛型函数#
函数可以用尖括号对类型泛型化:
fn first<T>(list: &[T]) -> &T {
&list[0]
}rustT 代表任意类型。编译器会从调用处推断。
结论#
Rust 函数自始至终都是表达式:参数有类型,最后一个表达式是返回值,所有权随值传递。本系列下一篇:所有权。