要在Rust中创建变量,您需要使用:
let var_name = 10;
这也是有效的:
let var_name: i32 = 10;
常量变量的创建方式如下:
const VAR_NAME: i32 = 10;
但是如果你试图像这样创建一个常量变量:
const VAR_NAME = 10;
你会得到一个如下所示的错误:
error: expected `:`, found `=`
--> src/main.rs:5:11
|
4 | const VAR_NAME = 10;
| ^ expected `:`
来自JavaScript,Python和PHP等语言,这让我很困惑。
为什么我在使用const
时必须指定一个类型定义,而不是在使用let
时?
目前,有一个rule“必须明确键入常量”。 (对于static
:“静态项类似于常量”)。
但是,你是对的:编译器可以推断它。有一个公开的讨论:#1349,TL; DR:
const
和static
变量的类型const FOO = 22
会推断i32
,所以可能不是人们所期望的类型。所以我们最终写了const FOO = 22usize
。const-fn
初始化变量时,应该推断出类型值得一提的是,Rust中类型推断的指导原则之一是类型推断应该是局部的。这就是为什么,与Haskell不同,函数签名总是需要完全指定。这有多种原因,特别是它意味着更容易推理人类读者和更好的错误信息。这使得模块级别
const
处于一个艰难的位置,推断。 Matthieu M.
到目前为止,仍然没有提议的RFC,所以这个问题保持开放。
也可以看看: