Solidity编程语言:结构体struct
使用结构体struct可以自定义数据类型,结构体内可以包含除自身以外的所有数据类型,如果包含自身则会形成递归。
定义与初始化
pragma solidity >=0.4.0 <0.6.0;
contract EgStruct { mapping (string => Book) bookList; struct Book{ string name; uint pages; string[] contents; }
struct Reader{ mapping (string => Book) books; string name; }
Reader r; function init() public{ string[] memory b1c = new string[](3); b1c[0] = "1.0.1"; b1c[1] = "1.0.2"; b1c[2] = "2.0.1"; Book memory b1 = Book("book1",10,b1c);
Book memory b2 = Book({ name:"book2", pages:20, contents:b1c });
Reader memory r1 = Reader("jack");
Reader memory r2 = Reader({ name:"rosh" });
// Reader memory r2 = Reader(bookList,"jack"); // Reader memory r3 = Reader({ // books:bookList, // name:"rosh" // });
r = r2; r.books["book1"] = b1; //r2.bookList["book2"] = b2;
//r2.books = bookList; //r.books = bookList;
} }
- Solidity中的结构只在当前合约或者子类合约中可用,外部是不可见的,而且使用结构体的函数需要修饰为internal。
- 非要这么做的话,则可以通过函数调用进行传递基本类型的数据,然后再次组装成同样的结构体 数组参数 这里有碰到个问题就是在函数参数不能是不固定的复杂类型参数,下边代码中seal1就无法编译通过。
pragma solidity >=0.4.0 <0.6.0;
contract EgStruct { struct Book{ string name; uint pages; }
function read(Book memory b) internal{}
function callTmp(EgStructTmp tmp) public{ Book memory b = Book("jingpinmei",10); tmp.seal(b.name,b.pages); }
}
contract EgStructSub is EgStruct{ function write(Book memory b) internal{} }
contract EgStructOut { /*function seal(Book memory b) {}*/ }
contract EgStructTmp{ struct Book{ string name; uint pages; } function seal(string memory name, uint pages) public { Book memory b = Book(name, pages); } }
作者:感谢HPB 蓝莲花团队整理供稿。
汪晓明博客:http://wangxiaoming.com/
汪晓明:HPB芯链创始人,巴比特专栏作家。十余年金融大数据、区块链技术开发经验,曾参与创建银联大数据。主创区块链教学视频节目《明说》30多期,编写了《以太坊官网文档中文版》,并作为主要作者编写了《区块链开发指南》,在中国区块链社区以ID“蓝莲花”知名。
- 12025年10月十大潜力加密货币推荐:牛市前的投资机会
- 2美国政府指控东南亚电诈巨头太子集团:12.7万枚比特币与150亿美元资产被没收
- 3罗伯特·清崎预测2025年经济崩溃,推荐白银和以太坊为避险资产
- 4黄金价格展望:9000美元目标或助1000美元投资翻倍
- 5美国政府比特币储备飙升至360亿美元:司法部史上最大规模没收行动
- 6鲍威尔释放停止缩表信号:金融市场流动性危机或成主因
- 72025年以太坊价格预测:ETH可能跌至3000美元,AlphaPepe或成下一个百倍Meme币
- 82025年以太坊价格预测:鲸鱼加速囤币,ETH剑指6,000美元,AlphaPepe成市场新宠
- 9美国司法部没收12.7万枚比特币,政府加密储备增至360亿美元
- 交易所
- 币种
排名 | 交易所 | 成交额 |
---|---|---|
1 | ![]() |
¥6,879.71亿 |
2 | ![]() |
¥2,697.36亿 |
3 | ![]() |
¥501.99亿 |
4 | ![]() |
¥142.74亿 |
5 | ![]() |
¥1,802.64亿 |
6 | ![]() |
¥917.73亿 |
7 | ![]() |
¥2,097.42亿 |
8 | ![]() |
¥10.91亿 |
9 | ![]() |
¥85.61亿 |
10 | ![]() |
¥412.36亿 |