如果我想解压缩一个元组并将其作为参数传递,有一种方法可以做到这一点:
//Does not compile
fn main() {
let tuple = (10, Vec::new());
foo(tuple);
}
fn foo(a: i32, b: Vec<i32>) {
//Does stuff.
}
Run Code Online (Sandbox Code Playgroud)
而不是必须这样做:
fn main() {
let tuple = (10, Vec::new());
foo(tuple.0, tuple.1);
}
fn foo(a: i32, b: Vec<i32>) {
//Does stuff.
}
Run Code Online (Sandbox Code Playgroud)
mca*_*ton 12
在夜间编译器:
#![feature(fn_traits)]
fn main() {
let tuple = (10, Vec::new());
std::ops::Fn::call(&foo, tuple);
}
fn foo(a: i32, b: Vec<i32>) {
}
Run Code Online (Sandbox Code Playgroud)
AFAIK没有稳定的方法可以做到这一点.
lje*_*drz 11
有一种方法,使用模式匹配的魔力:
fn main() {
let tuple = (10, Vec::new());
foo(tuple);
}
fn foo((a, b): (i32, Vec<i32>)) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
根据Rust参考:
与let绑定一样,函数参数是无可辩驳的模式,因此任何在let绑定中有效的模式也可以作为参数有效.
所以你可以指定一个参数:
(a, b): (i32, Vec<i32>)
Run Code Online (Sandbox Code Playgroud)
就像你在let声明中一样.
let (a, b) = (10, Vec::new());
foo(a, b);
Run Code Online (Sandbox Code Playgroud)