Может ли кто-нибудь объяснить (с примерами) разницу между контекстно-независимой и зависящей от контекста перегрузкой?перегрузка в разных языках программирования
ответ
Я никогда не слышал об этом. И есть только около пяти хитов в Google, один из которых - это самый вопрос, который, кажется, предлагает мне, что это составленные термины. И, как и с любым составленным термином, если вы хотите знать, что это значит, вы должны спросить того, кто его создал.
Из того, что я мог собрать, похоже, связано с перегрузкой на основе возвращаемого типа.
В принципе, если у вас есть четыре перегруженные функции, подобные этим:
foo :: string → int
foo :: string → string
foo :: string →()
foo :: int → int
И вы называете их, как это:
1 + foo 1
1 + foo "one"
foo "one"
Затем с контекстно-зависимой перегрузкой (т.е. перегрузка на основе возвращения тип, а также типы параметров) будут выбраны следующие варианты:
1 + foo 1 # foo :: int → int
1 + foo "one" # foo :: string → int (because `+` takes an `int`)
foo "one" # foo :: string →() (because there is no return value)
Принимая во внимание, что с контекстно-независимой перегрузкой (т. игнорируя тип возвращаемого значения), будут выбраны следующие реализации:
1 + foo 1 # foo :: int → int
1 + foo "one" # ERROR
foo "one" # ERROR
В обоих ERROR
случаях возникает неоднозначность между foo :: string → int
, foo :: string → string
и foo :: string →()
, так как они отличаются только их тип возвращаемого значения, но имеют один и тот же paremeter тип.
Цитируя here:
Есть два вида перегрузки функций/операторов.
- контекстно-независимый - перегрузки сделано только от параметров для функции или типа операндов для оператора
- контекстно-зависимый - что абстракции для вызова также зависит от типа результата
- 1. NULL в разных языках программирования
- 2. Различия в байтокодах в разных языках программирования
- 3. Случайные числа на разных языках программирования
- 4. Конструкторы в языках программирования
- 5. Частота символов в языках программирования
- 6. Диаграмма для расшифровки терминов в разных языках программирования
- 7. Математика с плавающей запятой в разных языках программирования
- 8. Происхождение наследования в языках программирования
- 9. Производительность стека в языках программирования
- 10. Функция «Отсутствует» (?) В языках программирования?
- 11. Иерархия заявлений в языках программирования
- 12. Проблемы культуры в языках программирования
- 13. Стратегии совместного использования общей логики на разных языках программирования
- 14. Комментирование внутри тела программы на разных языках программирования
- 15. Как я могу отслеживать эквивалентные функции на разных языках программирования?
- 16. Поведение стиля гаджета Windows на разных языках программирования
- 17. Как интегрировать программы, написанные на разных языках программирования?
- 18. Разработка SDK в нескольких языках программирования
- 19. Использовать соединение БД в языках программирования
- 20. Подраздел 1 на языках программирования
- 21. static на разных языках
- 22. передачи аргументов в разных языках
- 23. возможен на разных языках в сети?
- 24. Реализация стека вызовов в языках программирования
- 25. Расширение оператора pre increment в языках программирования
- 26. Откуда появляется объявление типа в языках программирования?
- 27. Взаимно рекурсивные функции в функциональных языках программирования
- 28. Использование «использования» или «использования» в языках программирования
- 29. OSGi как модульность в других языках программирования
- 30. Разрушение стержня в функциональных языках программирования