映射函数的可靠性

时间:2018-03-26 09:20:18

标签: solidity smartcontracts

我想知道是否可以在地图中稳定地映射函数,例如:

body {
    margin: 0px;
}

2 个答案:

答案 0 :(得分:1)

正如您可以阅读以太坊的可靠性文档: Mapping in ethereum solidity

  

映射仅允许用于状态变量(或作为内部函数中的存储引用类型)。

所以答案是否定的。 (到目前为止)

答案 1 :(得分:1)

虽然您无法将该功能存储为类型,但您可以存储bytes4表示,然后通过call()调用。

pragma solidity ^0.4.20;

contract Test {
    uint public _val;

    mapping(uint => bytes4) _methodToInvoke;

    function Test() public {
        _methodToInvoke[1] = bytes4(keccak256("incrementBy1()"));
        _methodToInvoke[2] = bytes4(keccak256("incrementBy2()"));
    }

    function incrementBy1() public {
        _val++;
    }

    function incrementBy2() public {
        _val += 2;
    }

    function invoke(uint idx) public returns (bool) {
        return this.call(_methodToInvoke[idx]);
    }
}