solidity语言排得上名吗 (solidity编程实例)

私信我或关注微信号:狮范课,回复:学习,获取免费学习资源包。

使用结构体struct可以自定义数据类型,结构体内可以包含除自身以外的所有数据类型,如果包含自身则会形成递归。

solidity语言排得上名吗,solidity编程实例

定义与初始化

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);
 }
}

来源网络,侵权联系删除

私信我或关注微信号:狮范课,回复:学习,获取免费学习资源包。