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

Rust 以下代码段中的变量具有什么值?,rust,Rust,将和[1..3]作为此语句的赋值是什么意思?我猜您希望数据属于和[i32;2]类型;事实并非如此。在这种情况下,当您不确定时,您可以通过尝试写入以下内容来验证: let数据:&[i32;2]=&[1..3] 这是行不通的。错误消息类似于: fn main() { let data = &[1..3]; println!("Data is {:?}", data); } main.rs:11:26:11:30错误:类型不匹配[E0308] main.rs:11:26:11

和[1..3]
作为此语句的赋值是什么意思?

我猜您希望
数据
属于
和[i32;2]
类型;事实并非如此。在这种情况下,当您不确定时,您可以通过尝试写入以下内容来验证:

let数据:&[i32;2]=&[1..3]

这是行不通的。错误消息类似于:

fn main() {
    let data = &[1..3];
    println!("Data is {:?}", data);
}
main.rs:11:26:11:30错误:类型不匹配[E0308]
main.rs:11:26:11:30注:应为'i32'类型`
main.rs:11:26:11:30注:找到类型`std::ops::Range`
您在这里实际拥有的是:

let数据:&[std::ops::Range]=&[1..3]

首先:

main.rs:11:26: 11:30 error: mismatched types [E0308]
main.rs:11:26: 11:30 note: expected type `i32`
main.rs:11:26: 11:30 note:    found type `std::ops::Range<_>`
创建与
foo
绑定具有相同生存期的临时数组,并存储对
foo
中的临时数组的引用

然而,这并不是你的程序所做的。正如另一个答案所说,运行它很有用,您可以得到:

let foo = &[1,2,3];
这看起来不像
[1,2,3]
!通过使用错误消息,我们可以欺骗编译器告诉我们它到底是什么。我们知道它肯定不是
()
,所以让我们先试试:

Data is [1..3]
这给了我们一个故意的错误,包括:

fn main() {
    let data = &[1..3];
    let () = data;
}
错误:类型不匹配[--explain E0308]

-->对象。

当然,因为这是一个有效的模式!下次会这样做的,谢谢。有一个有用的技巧可以找出类型:
let:()=data。这将导致一个错误,告诉您数据的类型。
error: mismatched types [--explain E0308]
 --> <anon>:3:17
  |>
3 |>     let () = data;
  |>         ^^ expected &-ptr, found ()
note: expected type `&[std::ops::Range<_>; 1]`
note:    found type `()`