聚焦资讯
服务于区块链创业者

Cairo1.0中的变量

chatGPT账号

变量是编程语言中最基本的元素。

基本使用

创建一个变量

use debug::PrintTrait;

fn main() {
    let x = 5;
    x.print();
}

使用let关键字来创建一个变量。PrintTrait是官方库提供的打印工具库。

变量的可变性

Cairo使用的是不可变的内存模型(immutable memory model),当一个内存空间被赋值后,就不可以再覆盖写入,只可以被读取。

这意味着Cairo中所有变量默认都是不可变的(听起来有点反直觉🙃️)。

尝试运行如下代码(使用命令:cairo-run --path $FILE_CAIRO)

use debug::PrintTrait;
fn main() {
    let x = 5;
    x.print();
    x = 6;
    x.print();
}

会得到如下错误

error: Cannot assign to an immutable variable.
 --> c01_var.cairo:5:5
    x = 6;
    ^***^

Error: failed to compile: src/c01_var.cairo

那么要使得变量可变,需要使用 mut 关键字

use debug::PrintTrait;
fn main() {
    let mut x = 5;
    x.print();
    x = 6;
    x.print();
}

上面👆x变量前面加了 mut 关键字,这样就可以正常运行了。

不可变的变量和🔗常量有几分相似,那它是否可以被当作常量使用呢?

Shadowing

Cairo中的Shadowing与Rust中的类似,就是可以实现:不同的变量使用相同变量名的效果。我们来看看具体的例子:

use debug::PrintTrait;
fn main() {
    let mut x = 5_u32;
    let x: felt252 = 10;
    {
        // 只会影响大括号内的变量,不影响括号以外的
        let x = x * 2;
        'Inner scope x value is:'.print();
        x.print()
    }
    'Outer scope x value is:'.print();
    x.print();
}

上述例子中let x: felt252 = 10;中定义的x变量将前一行的x完全遮盖,这也是Shadowing这个名称的由来。具有如下特征:

  1. 使用let关键字进行重新定义;
  2. 重新定义可以使用不同的数据类型,与之前的类型无关;
  3. Shadowing只影响同一命名空间中的变量;
  4. 无论变量是 immutable 还是 mutable,都可以被 shadowed,

注意⚠️:在使用Shadowing的时候,尽量避免在不同的命名空间使用相同的变量名,这样会很难定位bug。

免责声明

发文时比特币价格:$24249

免责声明:

本文不代表行至网立场,且不构成投资建议,请谨慎对待。用户由此造成的损失由用户自行承担,与行至网没有任何关系;

行至网不对网站所发布内容的准确性,真实性等任何方面做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,行至网对项目的真实性,准确性等任何方面均不做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,行至网不对其构成任何投资建议,用户由此造成的损失由用户自行承担,与行至网没有任何关系;

行至区块链研究院声明:行至区块链研究院内容由行至网发布,部分来源于互联网和行业分析师投稿收录,内容为行至区块链研究院加盟专职分析师独立观点,不代表行至网立场。

 

chatGPT账号
赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权,未经允许不得转载。
文章名称:《Cairo1.0中的变量》
文章链接:https://www.xingzhi.io/definance/19535.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

服务于区块链创业者

业务范围商务合作

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的区块链世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录后才能复制或下载网站内容