Cairo 102 进阶

1. 事件
2. 异常处理
3. 所有权-作用域
4. 所有权-Move
5. 所有权 III 保留所有权
6. 所有权 IV 引用
7. 所有权 V 快照
8. 特质和实现
9. 泛型
10. 接口/ABI
21. 所有权 IV 引用
所有权 IV 引用

让我们继续学习所有权的相关内容,在本章中,我们将学习如何使用 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 中的可变引用,进一步理解了该语言如何管理变量的所有权以及如何修改它们。

PreviousNext