APIのどこかで私は引数として&[&A]
を取る関数を持っていますが、ベクトルはA
というオブジェクトしかありません。Rustのベクトルからリファレンスのスライスを取得する方法は?
let a = &v[&..]
と
:私は成功せず、しかし、いくつかの試みを行っている<anon>:12:9: 12:10 error: mismatched types:
expected `&[&A]`,
found `&[A]`
(expected &-ptr,
found struct `A`) [E0308]
:私は 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);
}
でこの機能を使用しようとすると、私はエラーを持っています
let a = &v[&A]
&[&A]
をVec<A>
にするにはどうすればいいですか?
短い回答:できません。これらのタイプは互いに互換性がありません。 – mcarton
さて、興味深いのは、私が使っているAPIの機能が、この種の引数を持っている場合、どのように機能するのでしょうか? –
これが本当にAPIが必要とするものなら、あなたができることは 'test(&v.iter()。collect ::>());'です。しかし、これは新しいベクトルを割り当てます。あなたがAPIの作者であれば、それを変更することを検討してください: '[&T]'はあなたがスライスとその中のオブジェクトに異なる所有者を必要とするので、動作する奇妙な型です。 '&[T]'はすでに内部オブジェクトの参照渡しの意味を持っています。 –
mcarton