如何在 Solidity 中为函数设置默认参数
Posted
技术标签:
【中文标题】如何在 Solidity 中为函数设置默认参数【英文标题】:How to set default parameters to functions in Solidity 【发布时间】:2019-02-06 08:28:58 【问题描述】:我在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
?
如果默认参数不允许的话,如何实现呢?
感谢帮助?
【问题讨论】:
【参考方案1】: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);
【讨论】:
值得指出的是,Solidity 允许具有相同名称的函数,如果它们具有不同的参数类型。所以他们都可以被称为f(...)
。
非常正确。我不知道为什么我使用h()
...尤其是在提到函数重载之后。
谢谢 Adam 和 Carver,这是非常有效的信息
这太棒了...想了一会儿。【参考方案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:减法溢出
如果给出第三个参数,它将替换那个错误语句。
基本上:
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);
【讨论】:
但是,通过这个解决方案,我如何同时使用来自 web3 的f
方法?因为我只能用第一种方法f。
@HenryPalacios 我相信如果使用提供的参数(2 对 3)调用 f()
不起作用,您可能需要获取 HASH ID 名称并以这种方式从 web3 调用函数观点。以上是关于如何在 Solidity 中为函数设置默认参数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Selenium Webdriver 3 中为 Firefox 驱动程序设置默认配置文件?