【问题标题】:How can I declare a &[&T]] in rust?如何在 rust 中声明 &[&T]]?
【发布时间】:2023-03-16 04:38:01
【问题描述】:

我有无法编译的代码:

let vec1 = [1i, 2i, 3i];
let vec2 = [4i, 5i];
let v: &[&[int]] = [&vec1, &vec2];

我想要的很清楚:我想指出 v 包含 &[int] 项,即对不同大小的数组的引用。但是,无论我如何标记 v 的类型,都会出现编译器错误。以上状态

tst.rs:8:29: 8:34 error: mismatched types: expected `&[int, ..3]`, found `&[int, ..2]`     (expected array, found array)
tst.rs:8    let v: &[&[int]] = [&vec1, &vec2];
                                       ^~~~~
tst.rs:8:21: 8:35 error: mismatched types: expected `&[&[int]]`, found `[&[int, ..3], ..2]` (expected &-ptr, found array)
tst.rs:8    let v: &[&[int]] = [&vec1, &vec2];
                               ^~~~~~~~~~~~~~

这里的解决方案是什么?

【问题讨论】:

  • 您只是缺少&let v: &[&[int]] = &[&vec1, &vec2];(注意 = 后面的 &)有效。但是,根据您计划如何使用 v,您可能会遇到生命周期问题。

标签: vector reference rust


【解决方案1】:
let vec1 = [1i, 2i, 3i];
let vec2 = [4i, 5i];
let v = [vec1.as_slice(), vec2.as_slice()];
let v: &[&[int]] = v.as_slice();

第一个v[&[int], ..2] 类型,第二个v&[&[int]] 类型。我们不能直接定义&[&[int]] 类型的v,因为我们必须先为[&[int], ..2] 定义存储空间,然后才能借用它。

【讨论】:

  • 谢谢。我试过详细的slice(0, vec1.len()) 方法,但不知道as_slice()
  • @Fabien : 注意#![feature(slicing_syntax)]v[] 等价于v.as_slice()
  • 也很高兴知道,@Levans。谢谢。
  • @Levans:它可能不会留下来,但是&*v 不是等效的吗?
  • @MatthieuM。如果vVec<T>,但[T,..N] 没有实现Deref。
猜你喜欢
  • 2018-01-19
  • 1970-01-01
  • 2022-08-16
  • 2018-01-16
  • 1970-01-01
  • 2016-10-18
  • 2022-01-16
  • 2020-06-05
  • 1970-01-01
相关资源
最近更新 更多