Solidity 中的映射函数

Ant*_*ell 3 solidity smartcontracts

我想知道是否可以在 Solidity 中映射函数,例如:

mapping (uint256=> function) function_map;
f(){
    do something;
}
function_map[1] = f;
Run Code Online (Sandbox Code Playgroud)

Ada*_*nis 5

虽然您无法将函数存储为类型,但您可以存储表示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]);
    }
}
Run Code Online (Sandbox Code Playgroud)