q363657448的个人博客分享 http://blog.sciencenet.cn/u/q363657448

博文

solidity的结构体struct

已有 724 次阅读 2019-5-25 15:54 |系统分类:科研笔记

在编写智能合约代码的时候,常常会使用到struct结构体,其形式如下:

pragma solidity ^0.5.1;

contract Test {

    struct Animal {

        string name;

        uint256 age;

    }

}

其中Animal就是我们定义的一个结构体类型,里面可以放任意类型的值。

为什么使用结构体呢?因为如果我们要描述动物的时候,需要描述它的名字,年龄等。但是如果想描述新的动物时,不可能又再去写一遍,这样的操作太麻烦,因此可以把这种大类整合成一个结构体,当调用这个结构体的时候就说明需要添加一种新的动物。这样一来就很方便的去添加各种各样的动物。下面是例子说明。

pragma solidity ^0.5.1;

contract Test {

    struct Animal {

        string name;

        uint256 age;

    }

    function setAnimal() pure public {

        Animal memory animal = Animal("英短",5);

    }

}

上述例子在函数中构造了一个结构体对象英短,5岁。这是一种使用的方法,若要构造更多的对象,可以按照这样的方式继续写其他的对象属性等。

下面是一个结构体实例,可在Remix上测试使用

pragma solidity ^0.5.1;

contract Test {

    struct Animal {

        string name;

        uint256 age;

    }

    mapping (uint256 => Animal) animals;

    function setAnimal() payable public {

        Animal memory animal = Animal("英短",5);

        animals[1] = animal;

    }

    function getAnimal(uint256 number) public returns (string memory, uint256){

        return (animals[number].name,

                animals[number].age);

    }

}

首先定义了动物的结构体,然后初始化一个对象的属性,并且通过mapping映射,最后通过getAnimal函数输出对象的信息,当输入的number为1时,则会输出英短,5的结果。如要初试更多的对象,则可通过Animal memory 对象名 = Animal(string, uint256);继续初始化。另外animals[i] = 对象名 则需要用不同的数字来映射,最后要获得不同对象信息时则在调用getAnimal时输入不同的数字,则会出现不同对象的信息。



http://blog.sciencenet.cn/blog-3410412-1181103.html

上一篇:智能合约中的modifier和enum
下一篇:solidity 函数参数

0

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的精选博文

Archiver|手机版|科学网 ( 京ICP备14006957 )

GMT+8, 2019-11-15 08:38

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部