Функторы, когда я должен их использовать, каково их предназначение [закрыто]
Я просто не могу обернуться вокруг них.
Как я понимаю, это динамическое добавление логики в класс. Готовы ли к этому занятия в рамках?
Зачем мне просто расширять класс и добавлять к нему функциональность в расширении. Я был бы доступен по всему миру, и его было бы намного проще поддерживать.
Я прочитал, что есть 4 типа функторов:
Comparer
закрытие
сказуемое
Трансформатор
Мы должны, вероятно, справиться с каждым из них.
постскриптум есть ли что-то подобное в VB?
Поэтому я могу сказать, что я думаю, что лямбда-выражения являются функторами. Это немного проясняет для меня :) (хе-хе)
Лямбда-выражения являются функторами?Анонимные функции - это функторы?Но я задал этот вопрос, потому что я столкнулся с другим типом fucntors, а именно:
delegate void FunctorDelegate(int value);
class Addition {
FunctorDelegate _delegate;
public Addition AddDelegate(FunctorDelegate deleg) {
_delegate += deleg;
return this;
}
public int AddAllElements(IList< int> list) {
int runningTotal = 0;
foreach( int value in list) {
runningTotal += value;
_delegate(value);
}
return runningTotal;
}
}
И затем вызывая это с этим:
int runningTotal = new Addition()
.AddDelegate(new FunctorDelegate(
delegate(int value) {
if ((value % 2) == 1) {
runningOddTotal += value;
}
}))
.AddDelegate(new FunctorDelegate(
delegate(int value) {
if ((value % 2) == 0) {
runningEvenTotal += value;
}
}))
.AddAllElements(list);
Так что никаких необычных вещей в стиле лямбда.
Теперь у меня есть этот пример, но не совсем понятно, почему это «хорошее» решение.
Используются ли делегаты (функторы) как лямбда-выражения или анонимные методы "в большинстве случаев" просто как ярлык для программиста? Насколько я вижу, есть только несколько случаев, когда они на самом деле являются предпочтительным выбором для проблемы.