Нестабильная ошибка компилятора ремикса "Неизвестное исключение во время компиляции"
Онлайн-компилятор Remix выдает нестабильное сообщение об ошибке между одинаковыми кодами и похожим сценарием.
Remix продолжает выдавать "Неизвестное исключение во время компиляции". когда функция выполняет несколько динамических возвратов (три динамических массива uint[]).
Но когда я оценил возврат к двум динамическим массивам, проблема исчезла. И теперь я понятия не имею о причине этого. Имейте переключение другой версии солидности прагмы уже.
// Remix генерирует Неизвестное исключение во время компиляции.
function Determine_Result(uint GameId, uint RoundId) internal returns (uint[] memory WinnerUserId, uint[] memory DrawUserId, uint[] memory LoserUserId) {
uint[] memory Im_WinnerUserIdSet;
uint[] memory Im_DrawIdSet;
uint[] memory Im_LoserIdSet;
/*
...
*/
return (Im_WinnerUserIdSet, Im_DrawIdSet, Im_LoserIdSet);
}
// Тем не менее, это работает!?:(
function Determine_Result(uint GameId, uint RoundId) internal returns (uint[] memory WinnerUserId, uint[] memory DrawUserId) {
uint[] memory Im_WinnerUserIdSet;
uint[] memory Im_DrawIdSet;
uint[] memory Im_LoserIdSet;
/*
...
*/
return (Im_WinnerUserIdSet, Im_DrawIdSet);
}
Это особая проблема? Какой принцип лежит в основе и как это решить
Пожалуйста, я пойман в ловушку на этот день
1 ответ
Редактирование вашей функции следующим образом исправило ошибку, которую вы получаете для меня.
pragma solidity >=0.4.22 <0.6.0;
contract Test {
function Determine_Result() public pure returns (uint[] memory WinnerUserId, uint[] memory DrawUserId, uint[] memory LoserUserId) {
uint[] memory Im_WinnerUserIdSet;
uint[] memory Im_DrawIdSet;
uint[] memory Im_LoserIdSet;
/*
...
*/
return (Im_WinnerUserIdSet, Im_DrawIdSet, Im_LoserIdSet);
}
}
Кажется, ваша проблема как-то связана с версией компилятора. Код, который я написал, компилируется в версии 0.5.2. Код, который вы написали, компилируется в версии 0.4.22, но не в 0.5.2.
Насколько я понимаю, это результат того, что вы объявили 2 параметра, которые вы не используете внутри своей функции.
Это по-прежнему похоже на ошибку в компиляторе, хотя он ошибается в одном сценарии, но не в другом, по крайней мере, теперь вы знаете, что его вызывает.