TGViewer
Из Solidity в AI и дальше Из Solidity в AI и дальше @solidityset · 2.49K subscribers
Post #1186 1.02K
Solidity hints. Часть 21

А сегодня мы поговорим про Function Overloading - перегрузку функций.

32. Return parameters are not taken into account for overload resolution for function calls to overloaded functions, only function arguments are matched. (Overload resolution is nothing in practice because function dispatcher will match the selectors)

что в переводе:

Возвращаемые параметры не учитываются при разрешении перегрузки для вызовов перегруженных функций, сопоставляются только аргументы функции. (На практике разрешение перегрузки не имеет значения, поскольку диспетчер функций будет соответствовать селекторам)

Звучит запутано, но на практике все куда проще.

Вы порой могли замечать в контрактах, что есть функции с одинаковыми именами, но разным количеством принимаемых аргументов например:

contract A {
function f(uint value) public pure returns (uint out) {
out = value;
}

function f(uint value, bool really) public pure returns (uint out) {
if (really)
out = value;
}
}


Перегрузка функция также может применяться и во внешних интерфесах, однако тут нужно быть аккуратным, так как то, что "разное" для Solidity, может быть "одинаковым" для ABI. Наприммер,

contract A {
function f(B value) public pure returns (B out) {
out = value;
}

function f(address value) public pure returns (address out) {
out = value;
}
}

contract B {
}


Для Solidity объект контракта B, который принимает первая функция абсолютно отличается от аргумента типа address, который присутствует во второй функции. Однако на более "низком уровне", и объект контракта и address - это просто адреса. И поэтому компилятор будет выдавать ошибку при попытке собрать ваш контракт.

Также вам нужно быть аккуратными с размерностью принимаемых аргументов и возвращаемыми значениями. Например,

contract A {
function f(uint8 val) public pure returns (uint8 out) {
out = val;
}
function f(uint256 val) public pure returns (uint256 out) {
out = val;
}
}


Это еще один пример перегрузки функций, так как аргументы отличаются, не смотря на одинаковые имена функций.

При этом, если мы попробует выполнить f(50), то возникнет ошибка. По сути, число 50 может быть конвертировано, как в uint256, так и в uint8, и программа просто не поймет, какую функцию требуется вызвать. Но с запросом f(256) все будет ок, так как для этого числа подойдет только вторая функция.

Об этом и говорится в обозначенном в начале поста пункте.

#overloading
  • ❤ 1
  • 👍 1
  • 👌 1
More from @solidityset
  1. Sep 22, 2026Какой язык программирования учить сейчас? На днях в Твиттере увидел небольшой пост о разви…
  2. Sep 18, 2026Интересная модель Jev Буквально пару дней назад в Твиттере многие начали обсуждение новой…
  3. Sep 14, 2026Графы повсюду Если вы также следите за новостями в мире ИИ, то наверняка уже все чаще встр…
  4. Sep 10, 2026GTA6, Cyberleek, блокчейн и безопасность Увидел несколько постов (тут и тут) про Cyberleek…
  5. Sep 9, 2026Работа с чистой энергией Дисклеймер Сегодня ава и название канала, наконец, поменялись. Я…
  6. Sep 9, 2026Channel name was changed to «Из Solidity в AI и дальше»
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →