Анонимный метод, также известный, как лямбда-выражение, функциональный литерал или замыкание, может быть определен в Vala при помощи оператора =>. Список параметров должен находиться слева от оператора, а тело метода - справа.
Анонимный метод сам по себе не имеет смысла. Он полезен только если вы присваиваете его переменной типа делегат или передаете его в качестве аргумента в другой метод.
Обратите внимание, что ни тип параметра ни тип возвращаемого значения не заданы явно. Вместо этого типы определяются по сигнатуре делегата, которому присваивается метод.
Присваивание анонимного метода делегату.
delegatevoidPrintIntFunc(inta);voidmain(){PrintIntFuncp1=(a)=>{stdout.printf("%d\n",a);};p1(10); // Фигурные скобки не обязательны, если тело содержит одно выражение.PrintIntFuncp2=(a)=>stdout.printf("%d\n",a);p2(20):}
Пересылка анонимных методов в другие методы:
delegateintComparator(inta,intb);voidmy_sorting_algorithm(int[]data,Comparatorcompare){ // ... 'сравнение' происходит где-то здесь ...}voidmain(){int[]data={3,9,2,7,5}; // Анонимный метод передается в качестве второго аргумента:my_sorting_algorithm(data,(a,b)=>{if(a<b)return-1;if(a>b)return1;return0;});}
Анонимные методы поддерживают замыкания. Это значит, что вы можете получить доступ к переменным внешнего метода, внутри лямбда-выражения:
В этом примере curried_add (смотрите Каррирование) возвращает новосозданный метод, который сохраняет значение a. Это возвращённый метод вызывается затем с аргументом 4, выдавая в качестве результата сумму двух чисел.