学习 struct 定义 掌握 struct 定义代码位置 掌握 struct 命名规则 掌握 struct 不能递归 掌握 struct支持多种不同类型: 无符号整数、布尔值bool、地址address、字符串String、向量vecto
结构体必须定义在模块内部
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
}
fun example() {
let foo = Foo { x: 0, y: false }; 
let baz = Baz { foo: foo }; }
// 上面字段名称相同可以简写成:
let baz = Baz { foo };//字段名称双关结构的字段只能在定义该结构的模块内部访问。 所以我们必须提供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)
}
如有不正确的,欢迎交流指正。 
                如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!