函数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。谢谢。
我最近创建了一个函数来检查我的交换智能合约中是否存在一对。
函数看起来像这样:
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。谢谢。