Rust 语言基础语法:常量
常量表示不可变的值。如果你声明了一个常量,你将无法改变它的值。声明常量的关键字为 const。常量一定要显式声明它的数据类型。以下是声明常量的语法:
const VARIABLE_NAME:dataType = value;
常量命名规则
常量命名规则类似于变量命名规则。常量名中的字母通常都是大写的。与声明变量不同的是,声明常量不使用 let 关键字。(常量一般只使用大写字母并用下划线 _ 连接)
使用常量的示例如下所示:
fn main() {
const USER_LIMIT:i32 = 100; // 声明一个整型常量
const PI:f32 = 3.14; //声明一个浮点型常量
println!("user limit is {}",USER_LIMIT); //打印常量的值
println!("pi value is {}",PI); //打印常量的值
}
常量与变量的对比
在本节中,我们将学习变量与常量的不同之处。
-
常量使用 const 关键字来声明,而变量使用 let 关键字来声明。
-
变量的声明中可以选择是否声明数据类型,而声明常量时一定要声明它的数据类型。这意味着代码 const USER_LIMIT=100 将会导致错误。
-
使用 let 关键字声明的变量默认是不可变的。但是你可以选择使用 mut 关键字来使其可变。常量则永远是不可变的。
-
常量只能被赋予常量表达式而不能被赋予调用函数返回的值或是在运行时计算产生的值。(即常量的值一定要为编译前已知的值而非运行时产生的值)
-
常量可以在任何范围内声明,包括全局范围,这对于代码内需要被多处使用的值很有用。
变量和常量的覆盖(隐藏 Shadowing)
Rust 允许程序员用同一个变量名重复声明变量。此时,新的变量将覆盖旧的变量。
让我们通过以下的例子来帮助理解:
fn main() {
let salary = 100.00;
let salary = 1.50 ;
// 读取salary变量的值
println!("The value of salary is :{}",salary);
}
上述代码声明了两个名为 salary 的变量。第一个变量被赋值 100.00,而第二个变量被赋值 1.50。在显示输出时第二个变量覆盖(隐藏 shadow)了第一个变量。
输出结果
The value of salary is :1.50
Rust 支持不同数据类型的变量之间的覆盖(隐藏 shadowing)。
分析下面代码块的例子。
代码中声明了两个名为 uname 的变量。第一个变量被赋予了一个字符串,而第二个变量被赋予了一个整型。len 函数返回了字符串中的字符数。
fn main() {
let uname = "Mohtashim";
let uname = uname.len();
println!("name changed to integer : {}",uname);
}
输出结果
name changed to integer: 9
与变量不同的是,常量不可以被覆盖(隐藏 shadow)。如果上述程序中的变量全都换为常量,编译器将会输出错误。
fn main() {
const NAME:&str = "Mohtashim";
const NAME:usize = NAME.len();
//错误:`NAME` 已经被定义了
println!("name changed to integer : {}",NAME);
}