常量
在 Move 语言中,常量 是指在编译时就确定其值的不可变变量。它们就像程序中的 “钉子”,牢牢地固定了某个值,不会在程序运行过程中发生改变。常量可以用来存储一些重要的配置信息、常用的数学常数或者其他需要在程序中多次使用的固定值。
声明常量
使用 const
关键字声明常量,后面跟着常量名、类型和值,并以分号结尾。例如:
move
/// 物品在商店的价格
const ITEM_PRICE: u64 = 100;
/// 错误代码
const EItemNotFound: u64 = 1;
命名规范
- 常量名必须以大写字母开头,这在编译器级别强制执行。
- 常量名通常使用大写字母和下划线来分隔单词,例如
ITEM_PRICE
、TAX_RATE
等。 - 错误常量名可以使用
ECamelCase
命名法,例如EItemNotFound
。
常量的特性
不可变性
常量一旦声明,其值就无法再改变。任何试图修改常量值的代码都会导致编译错误。
模块私有性
默认情况下,常量是模块私有的,只能在定义它的模块内部使用。如果想让常量在其他模块中使用,可以使用 public
关键字将其公开。
使用常量的模式
配置模块
由于常量是模块私有的,为了在多个模块中共享常量,可以创建一个专门的 “配置模块” 来定义和导出常量。
例如,可以创建一个名为 config
的模块,在其中定义所有需要共享的常量,然后在其他模块中导入 config
模块并使用这些常量。
move
// config 模块
module book::config {
const ITEM_PRICE: u64 = 100;
const TAX_RATE: u64 = 10;
const SHIPPING_COST: u64 = 5;
/// 返回物品价格
public fun item_price(): u64 {
ITEM_PRICE
}
// ... 其他常量和函数
}
// 其他模块
module book::other_module {
use book::config;
// 使用 config 模块中的常量
let price = config::item_price();
// ...
}
这种模式可以简化更新过程。如果需要修改常量值,只需要更新 config
模块,然后升级包即可。
总结
- 常量是 Move 语言中一种不可变的变量,用于存储程序中需要多次使用的固定值。
- 使用
const
关键字声明常量,常量名必须以大写字母开头,通常使用大写字母和下划线来分隔单词。 - 常量是模块私有的,可以通过创建专门的 “配置模块” 来共享常量。