Я просто не могу обернуть вокруг них голову.
Насколько я понимаю, это динамическое добавление логики в класс. Подготовлены ли к этому занятия в рамках программы?
Почему я должен просто расширять класс и добавлять к нему функциональность в расширении. Я был бы глобально доступен, и, на самом деле, его было бы намного проще поддерживать.
Я читал, что существует 4 типа функторов:
Сравнитель
Замыкание
Предикат
Преобразователь
Вероятно, нам следует разобраться с каждым из них.
p.s. есть ли что-то подобное в vb?
Итак, я могу заявить, что считаю лямбда-выражения функторами. Это немного проясняет ситуацию для меня :) (хе-хе)
- Лямбда-выражения - это функторы?
- Анонимные функции являются функторами?
Но я задал этот вопрос, потому что столкнулся с другим типом функторов, а именно с этими:
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);
Так что никаких причудливых вещей в стиле лямбда.
Теперь у меня есть этот пример, но совсем не ясно, почему это «хорошее» решение.
Используются ли делегаты (функторы) как лямбда-выражения или анонимные методы «в большинстве случаев» просто как ярлык для программиста? Насколько я вижу, есть только несколько случаев, когда они на самом деле являются предпочтительным выбором для решения проблемы.