Move语言Struct教程

遂烂 发布于 2025-08-17 阅读 1295

学习 struct 定义 掌握 struct 定义代码位置 掌握 struct 命名规则 掌握 struct 不能递归 掌握 struct支持多种不同类型: 无符号整数、布尔值bool、地址address、字符串String、向量vecto

Struct和资源深入教程

学习资源l链接:

  1. Move官方教程
  2. 代码
  3. 配合视频更好食用 Move 语言使用 Struct 来表示一组自定义数据的集合。结构体可以存储任何非引用类型,包括其他结构体。
    如果结构体值无法复制且无法删除,我们通常将其称为资源

1、结构体相关规则

  1. 结构体必须定义在模块内部
address 0x2 {
    struct Foo { x: u64, y: bool }//这是错误的位置
module myModule {
    struct Foo { x: u64, y: bool }//正确位置
 
    }
}

  1. 命名规则:必须以大写字母A-Z开头,其余部分可以是字母A-Z, a-z, 数字0-9或下划线_
  2. 不能递归自身结构体
public struct Foo {
    /// HINT: 结构体可以包含多个字段
   /// HINT: 不能递归定义结构体
   // TODO: 注释掉递归错误
    foo: Foo//这是递归自身
    }

struct Baz { 
    name:vector<u8>,
    foo: Foo
}

2、创建结构体

fun example() {
let foo = Foo { x: 0, y: false }; 
let baz = Baz { foo: foo }; }
// 上面字段名称相同可以简写成:
let baz = Baz { foo };//字段名称双关

3、访问结构体数据

  • 结构类型只能在定义该结构的模块内创建(“打包”)、销毁(“解包”)。
  • 结构的字段只能在定义该结构的模块内部访问。 所以我们必须提供API让外部来访问修改数据。

    /// HINT: 访问 Foo 结构体x值
    /// TODO: 返回 x 
    public fun get_foo_x(foo: &Foo):u64 {
        /// TODO: 访问 foo 的字段 x 
        foo.x
        
        //0 // 临时返回值,需要替换成 foo.x
    }

    /// HINT: 访问 Foo 结构体y值
    /// TODO: 返回 y
    public fun get_foo_y( foo: &Foo):bool {
        /// TODO: 访问 foo 的字段 y
        foo.y
        // true // 临时返回值,需要替换成 foo.y
    }

4、解构Struct

结构体需要解构的几种方法

/// 销毁 Foo 结构体的实例
    public fun destroy_foo(foo: Foo): (u64,bool){

        /// HINT: 销毁结构体实例
        /// TODO: 销毁 foo 实例
        let Foo {x,y}=foo;
        (x, y)
        //(0, true) // 临时返回值,需要替换
    }

    /// 销毁 Foo 结构体的实例,使用通配符
    /// HINT: 通配符 _ 可以匹配任何值
    public fun destroy_foo_wildcard(foo: Foo)  {
        /// TODO: 使用通配符解构foo
        let Foo { x: _, y: _ } = foo;
    }

    public fun destroy_foo_assignment(foo: Foo): (u64, bool) {
        /// HINT: 使用赋值语句解构 foo
        /// TODO: 申明变量 x:u64, y:bool
        /// TODO: 使用赋值语句解构 foo
        let x: u64;
        let y: bool;
        let Foo { x, y } = foo;
        (x,y)
        //(0, true) // 临时返回值,需要替换成(x,y)
    }

如有不正确的,欢迎交流指正。

0 原创 分类:Move

相关文章

2 条评论

学move建议用这个教材: https://move-book.com/ ,该教材是SUI官方维护的,move专家在SUI这个项目,正统性和生态都比较好。

2025-08-18 17:10

好的,谢谢move友

2025-08-19 09:27