我的合同中有一个函数,它接受2个数字,并在这2个数字之间给出一个随机数。我可以在同一合同中的其他函数中调用此函数吗?
类似于:
function point(min, max) public view returns (uint256) {
return /* A number betwwen "min" and "max" */;
}
function generateSVG() public pure returns (string memory) {
.
.
.
svg = string(abi.encodePacked(svg, "stroke-width='" , point(1, 5) , "' "));
.
.
.
}
谢谢:D
简短回答:有时。
长答案:
在solidity中,我们指定函数和状态变量的可见性。有4种类型的可见性:
- 内部
- 外部
- 公共
- 私人
除非明确定义,否则可见性默认为internal
。
内部
函数/状态变量仅对包含它的契约可见,或继承包含它的合约
外部
只能由其他合同调用
公共
任何合同,无论是否包含代码,都可以调用
私人
只有声明它的合约才能调用,而不是继承它的合约
小心,关于随机性
以太坊中没有真正的随机性。您可以创建具有blockhash/块高度的伪随机值,也可以使用提供真正随机性的预言机,如Chainlik
是的,您可以调用它,除非您将它定义为公共或私有(如果您想在同一约定中调用函数并限制为继承的约定(或内部。下面显示了一个示例。
`//SPDX许可证标识符:MIT实用主义稳固性^0.8.5;
合同函数调用{
uint public addition = add(1,2);
uint public product = multiply(add(2,3),add(2,1));
function add(uint a,uint b)public pure returns(uint output){
output = a+b;
}
function multiply(uint a,uint b)public pure returns(uint){
return a*b;
}
}`