Function
使用 fn 声明函数,snake case 命名
fn main() { println!("Hello, world!"); another_function(); } fn another_function() { println!("Another function."); }
声明带参数的函数
#![allow(unused)] fn main() { fn print_labeled_measurement(value: i32, unit_label: char) { println!("The measurement is: {value}{unit_label}"); } }
Statements and Expressions 语句和表达式
rust 是基于表达式的语言
- 语句
Statements是执行某些操作而不返回值的指令 - 表达式
Expressions是计算并返回值的代码
fn main() { let y = 6; }
let y = 6; 是一个语句,整个函数也是语句。表达式可以是语句的一部分,let y = 6;其中的6是一个表达式
调用函数和宏 macro是表达式
fn main() { let y = { let x = 3; x + 1 }; println!("The value of y is: {y}"); }
一个由 {}构成的语句块是表达式。表达式不需要句末的 ;,如语句块的第二行 x+1,加上 ;会变成语句
带返回值的函数
无返回值时隐式返回空元组()即unit
声明带返回值的函数
#![allow(unused)] fn main() { fn 函数名(参数列表) -> 返回值类型 { 函数体 } }
rust 的函数返回值和函数体的最后表达式的值相同,大多数函数隐式的返回最后表达式的值,当然也可以显式的使用 return返回
fn five() -> i32 { 5 } fn main() { let x = five(); println!("The value of x is: {x}"); }
如上述five函数的5这行末尾没加;,隐式的返回5为函数返回值。若加上;,则5变成了语句,five函数隐式返回空tuple ()的unit,和函数指定的i32不匹配,就会报编译错误error[E0308]: mismatched types
通过元组返回多个值
fn main() { let s1 = String::from("hello"); let (s2, len) = calculate_length(s1); println!("The length of '{s2}' is {len}."); } fn calculate_length(s: String) -> (String, usize) { let length = s.len(); // len() returns the length of a String (s, length) }