1. 搜链财经首页
  2. 新闻

Solidity编程语言:结构体struct

Solidity编程语言技术指南系列。

使用结构体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;

} }

  1. Solidity中的结构只在当前合约或者子类合约中可用,外部是不可见的,而且使用结构体的函数需要修饰为internal。
  2. 非要这么做的话,则可以通过函数调用进行传递基本类型的数据,然后再次组装成同样的结构体 数组参数 这里有碰到个问题就是在函数参数不能是不固定的复杂类型参数,下边代码中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“蓝莲花”知名。

风险提示:请谨防ICO、变相ICO 等非法集资行为; 搜链财经所发表资讯不代表本公司任何投资暗示。
发布者:巴比特,如有侵权或者违规,请邮件tousu@searchain.net,欢迎举报。本文链接:https://www.searchain.net/news/247497.html

发表评论

登录后才能评论

联系我们

176-9654-3888

在线咨询:点击这里给我发消息

邮件:80164590@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code