【发布时间】:2019-08-16 00:25:36
【问题描述】:
我想设计一个类似于示例here 的函数,除了在我的情况下,iproduct 的参数数量在编译时是未知的。正如here 解释的那样,这很容易在 python 中完成。
我曾尝试使用itertools crate,特别是iproduct!、multi_cartesian_product 和cartesian_product,但目前正在与类型系统作斗争,并且不确定它是否是正确的路径。
pub fn product_of_lists(lists: &Vec<Vec<u16>>) -> std::slice::Iter<'_, u16> {
// generate cross products between lists
assert!(lists.len() > 2);
let mut product_iter = lists[0].iter();
for (en, list) in lists.iter().enumerate() {
if en > 0{
product_iter = iproduct!(product_iter, list.iter());
}
}
product_iter
}
error[E0308]: mismatched types
--> src/testcode.rs:44:28
|
10 | product_iter = iproduct!(product_iter, list.iter());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `std::slice::Iter`, found struct `itertools::adaptors::Product`
|
= note: expected type `std::slice::Iter<'_, _>`
found type `itertools::adaptors::Product<std::slice::Iter<'_, _>, std::slice::Iter<'_, u16>>`
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
【问题讨论】: