Move语言Struct教程

  • 遂烂
  • 发布于 2天前
  • 阅读 190

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

Struct和资源深入教程

学习资源l链接:

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

    1、结构体相关规则

  4. 结构体必须定义在模块内部

    
    address 0x2 {
    struct Foo { x: u64, y: bool }//这是错误的位置
    module myModule {
    struct Foo { x: u64, y: bool }//正确位置
    
    }
    }
2. 命名规则:必须以大写字母A-Z开头,其余部分可以是字母A-Z, a-z, 数字0-9或下划线_
3. 不能递归自身结构体
``` Move
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
  • 标签:
点赞 0
收藏 0
分享

2 条评论

请先 登录 后评论
遂烂
遂烂
0x7eb3...990c
江湖只有他的大名,没有他的介绍。