Solidity
語法錯誤:類型 tuple(bool,bytes memory) 不能隱式轉換為預期的 bool 類型
我正在嘗試編譯以下程序:
pragma solidity ^0.5.1; contract MKotET1_1{ address payable king; uint public claimPrice = 100; function calculateCompensation() public returns(uint) { } function( ) external payable { if (msg.value < claimPrice) revert(); uint compensation = calculateCompensation(); if(!king.call.value(compensation)("")) revert(); king = msg.sender; } }
我收到以下語法錯誤:
> > solc MKotET_stackExchange.sol MKotET_stackExchange.sol:12:14:錯誤:一元運算符!不能應用於 >type tuple(bool,bytes memory) if(!king.call.value(compensation)("")) revert(); ^——————————–^ MKotET_stackExchange.sol:12:14: 錯誤: 類型元組(bool,bytes memory) 不能隱式轉換為預期的 bool 類型。if(!king.call.value(compensation)("")) revert(); ^——————————–^ > > >
有人請指導我如何刪除上述語法錯誤。
祖爾菲。
試試這個:
pragma solidity ^0.5.1; contract MKotET1_12{ address payable king; uint public claimPrice = 100; function calculateCompensation() public returns(uint) {} function() external payable { if (msg.value < claimPrice) revert(); uint compensation = calculateCompensation(); (bool success, ) = king.call.value(compensation)(""); require(success); king = msg.sender; } }
來自文件:
為了與不遵守 ABI 的合約進行互動,或者為了更直接地控制編碼,提供了
call
和delegatecall
功能staticcall
。它們都採用單個bytes memory
參數並返回成功條件(作為 abool
)和返回的數據(bytes memory
)。