以下代码段中的变量有什么价值?

Kaj*_*nha 3 rust

fn main() {
    let data = &[1..3];
    println!("Data is {:?}", data);
}
Run Code Online (Sandbox Code Playgroud)

拥有&[1..3]此声明的指定值意味着什么?

Chr*_*son 6

首先:

let foo = &[1,2,3];
Run Code Online (Sandbox Code Playgroud)

创建一个与foo绑定具有相同生命周期的临时数组,并存储对其的引用foo.

但是,这并不是您的计划正在做的事情.正如另一个答案所说,运行它是有用的,你会得到:

Data is [1..3]
Run Code Online (Sandbox Code Playgroud)

那看起来不像[1,2,3]!我们可以通过使用它的错误消息欺骗编译器告诉我们它到底是什么.我们知道它绝对不是(),所以让我们先尝试一下:

fn main() {
    let data = &[1..3];
    let () = data;
}
Run Code Online (Sandbox Code Playgroud)

这给了我们一个错误的目的,其中包括:

error: mismatched types [--explain E0308]
 --> <anon>:3:17
  |>
3 |>     let () = data;
  |>         ^^ expected &-ptr, found ()
note: expected type `&[std::ops::Range<_>; 1]`
note:    found type `()`
Run Code Online (Sandbox Code Playgroud)

这告诉我们答案 - data&一个项目([_;1])的数组的引用(),它是一个std::ops::Range<_>对象.