Я читал документацию по солидности о том, когда генерируется исключение в стиле утверждения. В 6-м пункте сказано:
«Если вы вызываете переменную с нулевой инициализацией типа внутренней функции».
Я этого не понимаю. Может ли кто-нибудь привести мне пример?
Переменные могут содержать указатели на функции. Если вы оставите их неинициализированными, а затем попытаетесь вызвать их, вызов завершится ошибкой, поскольку переменная была инициализирована нулем и, следовательно, не содержит указателя на вызываемую функцию. Пример:
function b(int x, int y) internal pure returns (int)
{
return x * y;
}
function test1() external pure returns (int)
{
// Variable containing a function pointer
function (int, int) internal pure returns (int) funcPtr;
funcPtr = b;
// This call to funcPtr will succeed
return funcPtr(4, 5);
}
function test2() external pure returns (int)
{
// Variable containing a function pointer
function (int, int) internal pure returns (int) funcPtr;
// This call will fail because funcPtr is still a zero-initialized function pointer
return funcPtr(4, 5);
}