在 Solidity 合约中,有如下声明:
contract Lottery is VRFConsumerBase, Ownable {
address payable[] public players;
...
...
在同一合同的其他地方,有一项转让如下:
....
....
recentWinner = players[someIndex];
....
....
}
deploy.py Python脚本用于部署合约。部署合约的函数是:
def deploy_lottery():
Lottery.deploy(....)
....
....
部署并执行其他操作后...合同的最近的获奖者使用括号从 python 脚本访问变量,如下所示:
def end_lottery():
print(f"{lottery.recentWinner()} is the winner!")
我相当基本的问题是,为什么使用括号? centreWinner 不是 Lottery 合约中定义的函数。如果我运行不带括号的脚本,我会得到以下输出。
<ContractCall 'recentWinner()'> is the winner!
Terminating local RPC client...
所以看来括号是必要的。有人可以解释一下发生了什么事吗?为什么我应该像函数一样对待这个变量来检索它的值?如果您还可以向我指出一些相关的帖子/阅读材料,我将不胜感激。谢谢你!
EVM 没有公共变量,只有公共访问器函数。
在幕后,Solidity 编译器生成一个名为recentWinner()
为你。这称为访问器或获取函数 https://blog.titanwolf.in/a?ID=00750-8efeff95-ae1c-44ca-85c1-56784b7650e5。与 Java 等语言不同,没有get
函数的前缀。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)