如何在 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语言是否提供
default parameters
?
- 如果不允许默认参数,如何实现相同的?
感谢您的帮助?
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);
}
}
我从 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语言是否提供
default parameters
? - 如果不允许默认参数,如何实现相同的?
感谢您的帮助?
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);
}
}