要在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
时却不必指定类型定义?
答案 0 :(得分:14)
当前,有一个rule“必须显式键入常量”。 (对于static
:“静态项目类似于常量”)。
但是,您是对的:编译器可以推断出它。对此进行了公开讨论:#1349,TL; DR:
const
和static
变量的类型const FOO = 22
会推断为i32
,因此可能不是人们期望的类型。所以我们最终写了const FOO = 22usize
。const-fn
初始化变量时,应推断类型值得一提的是,Rust中类型推断的指导原则之一是类型推断应该是局部的。这就是为什么与Haskell不同的是,始终需要完全指定函数签名的原因。造成这种情况的原因多种多样,尤其是对于人类读者而言,这意味着更容易的推理以及更好的错误消息。推论着,这使模块级别
const
处于困境。 Matthieu M.
到目前为止,仍然没有提议的RFC,因此这个问题仍然存在。
另请参阅: