如何从Rust中的向量中获取一片引用?

时间:2016-06-13 19:00:10

标签: vector rust

在我使用的API的某处我有一个以&[&A]为参数的函数,但我只有A个对象的向量。当我尝试使用此功能时 following syntax

pub struct A(pub u64);

fn test(a: &[&A]){}

fn main() {
   let v = vec![A(1), A(2), A(3)];
   let a = &v[..];
   test(a);
}

我有一个错误:

<anon>:12:9: 12:10 error: mismatched types:
 expected `&[&A]`,
    found `&[A]`
(expected &-ptr,
    found struct `A`) [E0308]

我做了一些尝试,但没有取得任何成功:

let a = &v[&..]

let a = &v[&A]

如何从&[&A]生成Vec<A>

1 个答案:

答案 0 :(得分:3)

简短回答:你不能。这些类型彼此不兼容。

如果这确实是API需要的话,你可以做什么

test(&v.iter().collect::<Vec<_>>());

但是这会分配一个新的向量。如果您是API的作者,请考虑更改它:&[&T]是一种奇怪的类型,因为切片及其中的对象需要不同的所有者。 &[T]已经有内部对象的pass-by-reference语义。