[英]What are the different ways to return a value from a function in 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));
}
难道只有这两个选项吗?
在 function 的尾部 position 中有一个不带分号的表达式。
fn implicit() -> i32 { 1 }
也可以看看:
使用return
语句。
fn explicit() -> i32 { return 1; }
也可以看看:
宏可以在其中包含return
语句,因此您可能并不总是看到return
。
macro_rules: thing { ($val;expr) => {{ if $val { return 42; } }}; } fn macro() -> i32 { thing!(true); 99 }
也可以看看:
使用?
在返回实现Try
的类型的 function 中。
fn error() -> Option<i32> { None?; Some(42) }
也可以看看:
根据您对“从函数返回”的确切分类方式,这些可能也适用:
在异步 function 中使用.await
。
async fn sometime() -> i32 { async { 42 }.await; 99 }
这是一个棘手且不明显的问题,因为编译器重写了 function 以包含 state 机器并实现Future
特征。 每个.await
都可以返回一个Poll::Pending
,但是 function 的调用者永远不必考虑这一点。
也可以看看:
惊慌失措。
fn bail_out() -> Option<i32> { panic!() }
在这里,function “返回”,但您通常不会得到值。
也可以看看:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.