跳到主要内容

WTF Cairo极简教程: 21. 所有权 IV 引用

我最近在学cairo-lang,巩固一下细节,也写一个WTF Cairo极简教程,供小白们使用。教程基于cairo 2.2.0版本。

推特:@0xAA_Science@WTFAcademy_

WTF Academy 社群:Discord微信群官网 wtf.academy

所有代码和教程开源在 github: github.com/WTFAcademy/WTF-Cairo


让我们继续学习所有权的相关内容,在本章中,我们将学习如何使用 Cairo 中的引用。

引用

在 Cairo 中,如果我们希望一个函数更改参数的值同时保留其所有权,就可以使用可变引用(mutable reference)。可变引用在函数执行结束时会被隐式返回,允许函数修改它的值,并且该值在调用函数的作用域中仍可使用。

你可以使用 ref 关键字创建可变引用。

use array::ArrayTrait;

fn reference_example(){
let mut x = ArrayTrait::<felt252>::new(); // x 进入作用域
use_reference(ref x); // 将 x 的可变引用传递给函数
let y = x; // 这是有效的
}

fn use_reference(ref some_array: Array<felt252>) {
}

在 Cairo 中,只有可变变量可以用 ref 标记,因为它们在函数结束时被隐式更新。以下代码将无法编译:

// 不可变变量不能作为引用传递
let z = ArrayTrait::<felt252>::new();
use_reference(ref z);
// error: Plugin diagnostic: ref argument must be a mutable variable.

总结

在这一章中,我们探讨了 Cairo 中的可变引用,进一步理解了该语言如何管理变量的所有权以及如何修改它们。