Skip to content

常量

在 Move 语言中,常量 是指在编译时就确定其值的不可变变量。它们就像程序中的 “钉子”,牢牢地固定了某个值,不会在程序运行过程中发生改变。常量可以用来存储一些重要的配置信息、常用的数学常数或者其他需要在程序中多次使用的固定值。

声明常量

使用 const 关键字声明常量,后面跟着常量名、类型和值,并以分号结尾。例如:

move
/// 物品在商店的价格
const ITEM_PRICE: u64 = 100; 

/// 错误代码
const EItemNotFound: u64 = 1;

命名规范

  • 常量名必须以大写字母开头,这在编译器级别强制执行。
  • 常量名通常使用大写字母和下划线来分隔单词,例如 ITEM_PRICETAX_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 关键字声明常量,常量名必须以大写字母开头,通常使用大写字母和下划线来分隔单词。
  • 常量是模块私有的,可以通过创建专门的 “配置模块” 来共享常量。