我有一个Vec
有以下元素:
let v = vec!(["ABC", "DEFG", "HIJKLMN"],
["foobar", "bar", "foo"],
["foobar2", "bar2", "foo2"])
我正在使用库table!
中的宏prettytable-rs
,它接受如下参数:
let table = table!(["ABC", "DEFG", "HIJKLMN"],
["foobar", "bar", "foo"],
["foobar2", "bar2", "foo2"]);
table.printstd();
基本上我想爆炸Vec
v
并将其元素作为多个参数传递给宏table!
或任何函数/方法。有可能这样做吗?
不可以。宏在语法树上工作,不能像这样解构现有的变量。
但是,使用table!
宏并不是构建prettytable::Table
的唯一方法。如果你看一下doc,你会注意到有an implementation of:
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();
}