Я видел лямбду, определенную как анонимная функция и как ссылка на функцию. Javascript поддерживает оба:
setTimeout(function(){ /* an anonymous function */ }, 100)
var f = function(){ /* function ref */ }
Именно здесь JS получает большую мощность и гибкость. Java в некоторой степени поддерживает первое (реализации анонимного интерфейса), , но не последнее - см. Ниже обновление для Java 8.
Мне неясно, какое (или оба) из них является правильным определением лямбды.
JS определенно не первый язык, который поддерживает эти функции. Исходя из памяти, я думаю о том, что энтузиасты языка всегда в восторге от поддержки лямбд.
Кстати: в Java анонимный класс обычно используется для передачи определения класса на лету для аргумента (часто используется в разгаре). Примерно так (из памяти, не скомпилировано):
someGuiContainer(new WidgetInterface()
{
public void importantMethodToDefine(){
// Handle having the method called in my special widget way
}
}
)
Обновление
Java, начиная с 8, теперь официально является лямбда-языком.
Теперь вы можете использовать следующий синтаксис:
MathOperation addition = (int a, int b) -> a + b;
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
Код источника