02_Cairo1.0中的常量(archived)

124 阅读1分钟

此文章使用的Cairo编译器版本:1.0.0-alpha.6。因为Cairo正在快速更新,所以不同版本的语法会有些许不同,未来将会将文章内容更新到稳定版本。

基本用法

use debug::PrintTrait;

const ONE_HOUR_IN_SECONDS: felt252 = 3600;

fn main(){
    ONE_HOUR_IN_SECONDS.print();
}

使用 const 关键字,并且指明了常量的类型,最后给出了常量的值。

与不可变变量的区别

常量有以下性质:

  1. 不允许使用 mut 关键字
  2. 只能在全局范围内声明
  3. 只可以使用字面量给常量赋值

将常量声明在函数中试试

use debug::PrintTrait;

fn main(){
	const ONE_HOUR_IN_SECONDS: felt252 = 3600;
    ONE_HOUR_IN_SECONDS.print();
}

这样写会收到一大堆的错误🙅。

使用非字面量赋值也会报错

use debug::PrintTrait;

const TEST: felt252 = 3600;
const ONE_HOUR_IN_SECONDS: felt252 = TEST;

fn main(){
    ONE_HOUR_IN_SECONDS.print();
}

上述代码使用一个常量给另一个常量赋值,会收到如下错误

error: Only literal constants are currently supported.
 --> d_const.cairo:4:38
const ONE_HOUR_IN_SECONDS: felt252 = test;
                                     ^**^