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