【CryptoZombies - 1 Solidity 教程】005结构体数组与私有/公共函数

目录

一、前言

二、结构体与数组(Structs and Arrays)

1、创建新的结构体

2、实战

三、私有 / 公共函数(Private / Public Functions)

1、函数默认属性

2、私有函数

3、实战


一、前言

看了一些区块链的教程,论文,在网上刚刚找到了一个项目实战,CryptoZombies。从这篇博客开始总结自己的学习笔记,与大家一同分享。

如果你想了解更多有关于机器学习、深度学习、区块链、计算机视觉等相关技术的内容,想与更多大佬一起沟通,那就扫描下方二维码加入我们吧!

二、结构体与数组(Structs and Arrays)

1、创建新的结构体

上几次我们讲到了结构体数组,用到了一个示例。示例如下:

struct Person {
  uint age;
  string name;
}

Person[] public people;

现在我们创建新的 Person 结构,然后把它加入到名为 people 的数组中:

// 创建一个新的Person:
Person syx = Person(21, "Shuiyixin");

// 将新创建的satoshi添加进people数组:
people.push(syx);

 我们也可以把上面两个操作简化为一个操作:

people.push(Person(21, "Shuiyixin"));

注:array.push() 在数组的 尾部 加入新元素 ,元素在数组中的顺序就是我们添加的顺序

2、实战

1.要求

1.在createZombie函数里新创建一个 Zombie, 然后把它加入 zombies 数组中。 新创建的僵尸的 namedna,来自于函数的参数。

2.用一行代码简洁地完成它。

2.代码

pragma solidity ^0.4.25;

contract ZombieFactory {

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    struct Zombie {
        string name;
        uint dna;
    }

    Zombie[] public zombies;

    function createZombie (string _name, uint _dna) {
        // start here
        zombies.push(Zombie(_name,_dna));
    }

}

三、私有 / 公共函数(Private / Public Functions)

1、函数默认属性

Solidity 定义的函数的属性默认是公共的。 这就意味着任何一方 (或其它合约) 都可以调用这个合约里的函数

2、私有函数

1.为什么要设置为私有?

不是任何时候,其他合约都可以调用某个合约中的函数,而且容易受到攻击

注:一般情况下,将函数定义为私有,只有外部调用时,才设置为公共

 

2.设置私有函数代码

设置私有函数方式如下:

uint[] numbers;

function _addToArray(uint _number) private {
  numbers.push(_number);
}

在这个代码中,我们定义一个无符号整数数组,并通过函数为其添加元素。

1.添加private意味着:只有合约中的其它函数才能够调用这个函数。

2.和函数的参数类似,私有函数的名字用(_)起始

3、实战

1.要求

将createZombie函数设置为私有。

2.代码

注意设置私有要设置两个地方:

1.给函数名添加前缀_。

2.在参数后面添加private

pragma solidity ^0.4.25;

contract ZombieFactory {

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    struct Zombie {
        string name;
        uint dna;
    }

    Zombie[] public zombies;

    function _createZombie (string _name, uint _dna) private {
        // start here
        zombies.push(Zombie(_name,_dna));
    }

}

 

你可能感兴趣的:(Blockchain)