Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 66.9MB ·虚拟内存 1301.8MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
类似于C语言,solidity 也有结构体 struc 类型,用于表示复合型数据。
结构体 struc 类型是引用类型。
例如,一本书的信息:
就可以用结构体来表示。
要定义结构,使用struct关键字。struct关键字定义了一个新的数据类型,包含多个成员。struct语句的格式如下
struct struct_name { type1 type_name_1; type2 type_name_2; type3 type_name_3; }
示例
struct Book { string title; string author; uint book_id; }
要访问结构的任何成员,使用成员访问操作符(.)。
示例
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract SolidityTest { struct Book { string title; string author; uint id; } Book book; function setBook() public { book = Book('Learn Java', 'aizws.net', 1); } function getBookAuthor() public view returns (string memory) { return book.author; } }
运行上述程序,先单击 setBook 按钮,然后单击 getBookAuthor 获取图书 Author。
输出结果:
string: aizws.net
结构体变量共有三种初始化方式。我们还可以定义结构体数组、结构体状态变量,并对其进行操作。
示例
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract SolidityTest { struct Book { string title; string author; uint id; address owner; } Book public book; Book[] public books; mapping(address=>Book[]) public booksByOwner; function operations() external { // 结构体直接按照字段顺序,进行初始化 Book memory book1 = Book('Learn Java', 'aizws.net', 1, msg.sender); // 结构体按照字段名,进行初始化 Book memory book2 = Book({title:'Learn JS', author:'aizws.net', id:2, owner:msg.sender}); // 结构体按照默认值,进行初始化 Book memory book3; book3.id = 3; book3.title = 'Learn C'; book3.author = 'aizws.net'; book3.owner = msg.sender; // 结构体数组操作 books.push(book1); books.push(book2); books.push(book3); // 结构体状态变量操作 Book storage _book = books[0]; delete _book.id; delete books[0]; _book.id = 100; } }
Solidity 映射 mapping 用于以键值对的形式存储数据,等同于其它编程语言的哈希表或字典。映射 mapping 是智能合约中很常用的一种数据类型,它是引用类型。下面是声明映射类型的语法。m ...