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

Vector 如何从Rust中的向量获取引用片段?,vector,rust,Vector,Rust,在我使用的API中,我有一个函数,它以&[&a]作为参数,但我只有a对象的向量。当我尝试将此函数用于 我有一个错误: <anon>:12:9: 12:10 error: mismatched types: expected `&[&A]`, found `&[A]` (expected &-ptr, found struct `A`) [E0308] 及 如何从Vec生成和[&A]?简短回答:你不能。这些类型彼此不兼容 如果这是A

在我使用的API中,我有一个函数,它以
&[&a]
作为参数,但我只有
a
对象的向量。当我尝试将此函数用于

我有一个错误:

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


如何从
Vec
生成
和[&A]

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


如果这是API真正需要的,您可以做什么

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

但这分配了一个新的向量。如果你是API的作者,考虑改变它:<代码>和[&t] 是一种奇怪的类型,因为你需要不同的所有者和它的对象。代码>&[T]已经有了内部对象的传递引用语义。

简短回答:你不能。这些类型彼此不兼容。那么,我很感兴趣-如果我使用的API的函数有这种参数,它们应该如何运行?如果API真正需要的是
test(&v.iter().collect::())。但这分配了一个新的向量。如果你是API的作者,考虑改变它:<代码> [&t] < /Cord>是一种奇怪的类型,因为你需要不同的所有者和它的对象。代码>&[T]
已经有了内部对象的传递引用语义。@麦卡顿谢谢,我会做一个PR,然后通知维护人员。我不知道该怎么处理这个问题。也许您会用这些信息回答?如果更改
test
是一个选项,它可以定义为
fn test(a:&[T]){}
,这将同时接受`&[&a]和&[a]。这也将是向后兼容的。@Shepmaster您有任何具体的例子,这将是有用的吗?我能想到的
&[&T]
的唯一用法是
&[&'static str]
。我能想到的一个用法是对trait对象的引用:
&[&Display]
。根据API的不同,它们可能还需要保持向后兼容性。
let a = &v[&..]
let a = &v[&A]
test(&v.iter().collect::<Vec<_>>());