在我使用的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]
如何从 Vec<A>
制作 &[&A]
?
test(&v.iter().collect::<Vec<_>>());
,但是这会分配一个新的向量。如果您是 API 的作者,请考虑更改它:[&T]
是一种奇怪的类型,因为您需要不同的所有者来管理切片和其中的对象。而&[T]
已经具有了内部对象的传递引用语义。 - mcartontest
是一个选项,可以将其定义为fn test<T: std::borrow::Borrow<A>>(a: &[T]) {}
,这将接受&[&A]
和&[A]
。这也将向后兼容。 - nngg