Types 预期类型`&;Vec<;u8>;`,找到`&;Vec<&;u8>`
我有这个小片段,但它没有编译,所有的错误都源于返回Types 预期类型`&;Vec<;u8>;`,找到`&;Vec<&;u8>`,types,rust,Types,Rust,我有这个小片段,但它没有编译,所有的错误都源于返回&Vec而不是&Vec 因此,它实际上应该是一个Vec作为一个专业程序员,你应该学会生成一个。以下是解决您问题的方法: extern crate itertools; use itertools::Itertools; const RANKS: [u8; 13] = [12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; fn main() { let one_combination: () = RAN
&Vec
而不是&Vec
因此,它实际上应该是一个
Vec
作为一个专业程序员,你应该学会生成一个。以下是解决您问题的方法:
extern crate itertools;
use itertools::Itertools;
const RANKS: [u8; 13] = [12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
fn main() {
let one_combination: () = RANKS.iter().combinations_n(5).next();
}
失败,并出现相关错误:
错误:不匹配的类型[E0308]
让一个组合:()=RANKS.iter().compositions_n(5.next();
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
帮助:运行'rustc--explain E0308'查看详细说明
注意:应为类型“()`
注意:找到类型“std::option::option”`
这表明这种对组合的特殊调用确实产生了Vec
,而不是Vec
那为什么呢
这一行来自组合SN的定义是关键:
type Item = Vec<I::Item>
因此,通过迭代一个切片,您可以得到对切片元素的引用,然后引用本身被传递到CombinationsN
,然后它克隆引用并将其收集到Vec
中
一种解决方案是克隆迭代的元素:
RANKS.iter().cloned().combinations_n(5)
谢谢实际上,我删除了很多代码,我认为这是一个足够小的示例。我以后会更留心的。也谢谢你的详细解释。@rubik不用担心!我只是想指出可以创建的较小版本,因为通常还有几个步骤来精简示例。至少你的问题包含了足够的信息来重现问题^_^
type Item = Vec<I::Item>
type Item = &'a T
RANKS.iter().cloned().combinations_n(5)