实验5.2 结构体中的mapping

在Solidity中struct结构体的存储类型为storage类型,在函数中调用时又得声明为memory类型。但结构体中的mapping类型比较特殊,它必须得storage类型才可以被调用与赋值。

实验目的

1.明白如何调用与赋值struct结构体中的mapping映射

实验要求

1. 编译下面的代码,你会发现映射map调用与赋值失败。那是因为struct定义的map是storage类型,不能被memory类型的s所调用。请你在函数外声明一个Student的对象stu,再用stu调用map并赋值。

2. 请尝试版本 ^0.7.0,查看是否编译通过若不通过则原因是什么?

以下是本次实验所使用到的测试代码,请使用remix编辑器完成该实验

// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0; 
 
contract StructTest{ 
    // 定义一个结构体 
    struct Student{ 
        string name; 
        uint grade; 
       mapping(uint=>string) map;
}
    function init() public returns(string memory,uint, string memory){
        Student memory s = Student("tong",100); 
        s.map[0] = "jack";
        return(s.name,s.grade, s.map[0]); 
    }
}

下面是本次实验所配套的视频教程: