我在文档中找不到有关此表达式的任何信息。关于Ehternaut重新进入任务,有以下代码。
function withdraw(uint _amount) public {
if(balances[msg.sender] >= _amount) {
(bool result,) = msg.sender.call{value:_amount}("");
if(result) {
_amount;
}
balances[msg.sender] -= _amount;
}
}
_amount;
是什么意思?
if(result) {
_amount;
}
这个片段实际上没有任何作用。您可以安全地忽略它,因为它与可重入性漏洞无关。
如果没有提到的代码段,编译器将对未使用的result
变量发出警告。如果他们没有声明result
变量,就会出现另一个关于不检查低级调用结果的警告。如果他们只是让条件块为空——是的,这是关于空块的另一个警告。
所以我最好的猜测是,作者只是想清除警告,并选择了这种方式。