fn main() {
let data = &[1..3];
println!("Data is {:?}", data);
}
Run Code Online (Sandbox Code Playgroud)
拥有&[1..3]
此声明的指定值意味着什么?
首先:
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<_>
对象.