在我使用的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>
?
答案 0 :(得分:3)
简短回答:你不能。这些类型彼此不兼容。
如果这确实是API需要的话,你可以做什么
test(&v.iter().collect::<Vec<_>>());
但是这会分配一个新的向量。如果您是API的作者,请考虑更改它:&[&T]
是一种奇怪的类型,因为切片及其中的对象需要不同的所有者。 &[T]
已经有内部对象的pass-by-reference语义。