是否可以将集合扩展到函数的多个参数



我有一个Vec,它有以下元素:

let v = vec!(["ABC", "DEFG", "HIJKLMN"],
["foobar", "bar", "foo"],
["foobar2", "bar2", "foo2"])

我正在使用库prettytable-rs中的宏table!,它接受如下参数:

let table = table!(["ABC", "DEFG", "HIJKLMN"],
["foobar", "bar", "foo"],
["foobar2", "bar2", "foo2"]);
table.printstd();

基本上我想分解Vecv并将其元素作为多个参数传递给宏table!或任何函数/方法。可以这样做吗?

No.宏在语法树上工作,并且不能像这样解构现有变量。

但是,使用table!宏并不是构造prettytable::Table的唯一方法。如果您查看该文档,您会注意到有一个实现:

impl<T, A, B> From<T> for Table where
B: ToString,
A: IntoIterator<Item = B>,
T: IntoIterator<Item = A>, 

这意味着你可以从任何可双重迭代的东西构造一个表,产生实现ToString的东西。

这允许像这样构造表:

#[macro_use]
extern crate prettytable;
use prettytable::Table;
fn main() {
let v = vec![
["ABC", "DEFG", "HIJKLMN"],
["foobar", "bar", "foo"],
["foobar2", "bar2", "foo2"],
];
let table = prettytable::Table::from(v.iter());
// Print the table to stdout
table.printstd();
}

最新更新