Вызов инициализированной нулем переменной типа внутренней функции

Я читал документацию по солидности о том, когда генерируется исключение в стиле утверждения. В 6-м пункте сказано:

«Если вы вызываете переменную с нулевой инициализацией типа внутренней функции».

Я этого не понимаю. Может ли кто-нибудь привести мне пример?

Ответы (1)

Переменные могут содержать указатели на функции. Если вы оставите их неинициализированными, а затем попытаетесь вызвать их, вызов завершится ошибкой, поскольку переменная была инициализирована нулем и, следовательно, не содержит указателя на вызываемую функцию. Пример:

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);
}