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 `()`