函数returns 2个参数时如何使用if语句?

How to use if statement when function returns 2 arguments?

我最近创建了一个函数来检查我的交换智能合约中是否存在一对。

函数看起来像这样:

function checkIfPairExists(address _token1, address _token2) internal returns(uint, bool) {
    for (uint index = 0; index < tokenPairs.length; index++) {
        if (tokenPairs[index].token1 == _token1 && tokenPairs[index].token2 == _token2) {
            return (index, true);
        }
        else if (tokenPairs[index].token2 == _token1 && tokenPairs[index].token1 == _token2) {
            return (index, true);
        } else {
            return (0, false);
        }
    }

}

这个函数工作正常,但是当我尝试在这样的 if 语句中使用该函数时:

if (checkIfPairExists(_token1, _token2) == (uint256, true)) 

如何写才正确?我正在尝试接收我的数组和布尔对的索引以查看该对是否存在。然后我需要保存该索引以找到它应该添加到哪对。

希望它有意义。

让我知道我是否应该重新表述这个问题,这样更多的人会理解它并且它可以帮助他们。

谢谢

您需要将返回值分配给两个单独的变量。然后你可以验证它们中的任何一个。

(uint256 index, bool exists) = checkIfPairExists(_token1, _token2);
if (exists == true) {
    // do something with `index`
}

正如@pert-hejda 在上面的回答中所说,您需要为函数分配 return 值,然后您可以使用这些值来检查条件。为什么?因为多个return表示为tuples and currently the feature you want is not supported in solidity. So, you will need to assign the return values and use those values in conditionals。谢谢。