Ham*_*tar 0 return function rust
我遇到了以下两种方式:
#[derive(Debug)]
struct InputList(i32, i32, i32, i32);
#[derive(Debug)]
struct OutputList(i32, i32, i32, i32);
// Option 1
fn foo(input_list: InputList) -> OutputList {
return OutputList(input_list.0, input_list.1, input_list.2, input_list.3);
}
// Option 2
fn bar(input_list: InputList) -> OutputList {
OutputList(input_list.0, input_list.1, input_list.2, input_list.3)
}
fn main() {
let input_list1 = InputList(1, 2, 3, 4);
let input_list2 = InputList(6, 7, 8, 9);
println!("foo() invocation output: {:?}", foo(input_list1));
println!("bar() invocation output: {:?}", bar(input_list2));
}
Run Code Online (Sandbox Code Playgroud)
只有这两种选择吗?
在函数的尾部位置有一个没有分号的表达式。
fn implicit() -> i32 {
1
}
Run Code Online (Sandbox Code Playgroud)
也可以看看:
使用return声明。
fn explicit() -> i32 {
return 1;
}
Run Code Online (Sandbox Code Playgroud)
也可以看看:
宏可以包含return它们的内部报表,所以你可能并不总是看到的return。
macro_rules! thing {
($val:expr) => {{
if $val {
return 42;
}
}};
}
fn macro() -> i32 {
thing!(true);
99
}
Run Code Online (Sandbox Code Playgroud)
也可以看看:
?在返回类型实现的函数中使用Try。
fn error() -> Option<i32> {
None?;
Some(42)
}
Run Code Online (Sandbox Code Playgroud)
也可以看看:
根据您对“从函数返回”的确切分类方式,这些也可能适用:
使用.await异步功能。
async fn sometime() -> i32 {
async { 42 }.await;
99
}
Run Code Online (Sandbox Code Playgroud)
这是一个棘手且不明显的问题,因为编译器重写了函数以包含状态机并实现Future特征。每个都.await可以返回 a Poll::Pending,但函数的调用者永远不必考虑这一点。
也可以看看:
恐慌。
fn bail_out() -> Option<i32> {
panic!()
}
Run Code Online (Sandbox Code Playgroud)
在这里,函数“返回”,但通常不会得到值。
也可以看看:
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |