如何在 Solidity 中为函数设置默认参数

How to set default parameters to functions in Solidity

我从 Solidity Documentation 中看到了下面的示例,并且在我的项目中有类似的代码,如果密钥没有从调用者传递

,我想将 default value 设置为密钥参数
pragma solidity ^0.4.0;

contract C {
    function f(uint key, uint value) public {
        // ...
    }

    function g() public {
        // named arguments
        f({value: 2, key: 3});
    }
}

我的问题是-

感谢您的帮助?

Solidity 不支持默认参数,但它在他们的路线图上(参见 https://github.com/ethereum/solidity/issues/232)。要解决此问题,只需使用函数重载:

pragma solidity ^0.4.0;

contract C {
    function f(uint key, uint value) public {
        // ...
    }

    function h(uint value) public {
        f(123, value);
    }

    function g() public {
        // named arguments
        f({value: 2, key: 3});
    }

    function i() public {
        h({value: 2});
    }
}

Openzeppelin 很好地举例说明了如何创建“默认”参数。查看他们的 SafeMath Library.

在其中,他们有两个子(减法)合约,它们在可见性和可变性方面是相同的——但一个关键的区别是:

function sub(
    uint256 a,
    uint256 b
)internal pure returns (uint256) {
    return sub(a, b, "SafeMath: subtraction overflow");
}

function sub(
    uint256 a,
    uint256 b,
    string memory errorMessage
) internal pure returns (uint256) {
    require(b <= a, errorMessage);
    uint256 c = a - b;

    return c;
}

第一个默认有两个参数 a 和 b(将被减去)。如果没有给出第三个参数(错误语句),它将默认为

SafeMath: subtraction overflow

如果给出第三个参数,它将替换该错误语句。

本质上:

pragma solidity >=0.6.0 <0.9.0;

contract C {
    function f(unit value) public {
        uint defaultVal = 5;
        f(defaultVal, value);

    function f(uint key, uint value) public {
        // ...
    }

    function g() public {
        // named arguments
        f(2, 3);
    }
}