Vector rust中'Vec::new()`的默认类型是什么?
我是新手。我知道Rust在编译时预测绑定的类型。下面的代码编译并运行Vector rust中'Vec::new()`的默认类型是什么?,vector,rust,Vector,Rust,我是新手。我知道Rust在编译时预测绑定的类型。下面的代码编译并运行 fn main() { let mut numbers = Vec::new(); numbers.push(1); } 数字向量的默认类型是什么?Vec::new()依赖其上下文获取信息。当你把一些东西推到向量上时,编译器知道“哦,这是我应该期望的对象类型”。但是,由于您的示例推动整数文本1,这似乎与 在Rust中,未类型化的整数文本将在编译时根据上下文分配一个值。例如: let a = 1u8; let
fn main() {
let mut numbers = Vec::new();
numbers.push(1);
}
数字
向量的默认类型是什么?Vec::new()
依赖其上下文获取信息。当你把一些东西推到向量上时,编译器知道“哦,这是我应该期望的对象类型”。但是,由于您的示例推动整数文本1
,这似乎与
在Rust中,未类型化的整数文本将在编译时根据上下文分配一个值。例如:
let a = 1u8;
let b = 2;
let c = a + b;
b
和c
将是u8
sa+b
将b
指定为与a
相同的类型,因此操作的输出为au8
如果未指定类型,编译器将选择
i32
(per)。因此,在您的具体示例中,正如在游乐场中看到的,数字
将是一个向量
Rust中的向量是泛型的,这意味着它们没有默认类型-除非默认情况下您指(t
是泛型参数)或(
是泛型参数)
如果编译器找不到任何相关的类型注释,或者无法使用类型推断推断元素类型,它将拒绝生成代码:
let mut numbers = Vec::new();
error[E0282]: type annotations needed
--> src/main.rs:2:23
|
2 | let mut numbers = Vec::new();
| ----------- ^^^^^^^^ cannot infer type for `T`
| |
| consider giving `numbers` a type
您可以尝试使用以下方法进一步验证:
让mut number=Vec::new();
设()=个数;
错误[E0308]:类型不匹配
-->src/main.rs:4:9
|
3 | let()=数字;
|^^应为结构'std::vec::vec',找到()
|
=注意:应为'std::vec::vec`//vec类型
找到类型“%1”()`
。我很想知道您使用的是什么编译器和/或您定义的“编译和运行”是什么。我的意思是rustc
,我使用的是cargo。在编辑的帖子中没有默认的键入。这是Vec
,你可以知道,因为你调用的是u64::from_string
,这是结果
,而expect
打开了该值。@E_net4最初的问题与整数无关(并且没有明显的重复项),但我认为提问者被这些评论打消了信心;不过,我现在不知道如何处理这个问题。这一行让上下文非常清楚,“当你把某个东西推到向量上时,编译器知道”哦,这是我应该期望的对象类型“。非常精确的答案。
let mut numbers = Vec::new();
let () = numbers;
error[E0308]: mismatched types
--> src/main.rs:4:9
|
3 | let () = numbers;
| ^^ expected struct `std::vec::Vec`, found ()
|
= note: expected type `std::vec::Vec<_>` // Vec<_>
found type `()`