Функция мутлиметода в Clojure предназначена для нескольких сценариев отправки. Он эффективно разрешает полиморфизм во время выполнения, когда вызываемый метод зависит от типа аргументов метода (традиционный полиморфизм одной отправки зависит от типа времени выполнения объекта, получающего вызов метода). В принципе, вы можете думать о полиморфизме одной отправки как о методе M
M(arg1, arg2, arg3, ..., argn)
, а фактический метод, который вызывается, зависит от типа среды выполнения arg1
(поэтому мы переписываем обычный синтаксис
arg1.M(arg2, arg3, ..., argn)
1011 *, как *
M(arg1, arg2, arg3, ..., argn)
, чтобы прояснить аналогию. При многократной отправке метод, который вызывается
M(arg1, arg2, arg3, ..., argn)
зависит также от типов времени выполнения arg1
, arg2
, ..., argn
.
Вы можете достичь аналогичной функциональности в C # с помощью dynamic
.
Честно говоря, это никак не связано с методами расширения.