ฉันเคยเห็นแลมบ์ดาที่กำหนดให้เป็นฟังก์ชันที่ไม่ระบุตัวตนและเป็นการอ้างอิงถึงฟังก์ชัน Javascript รองรับทั้ง:
setTimeout(function(){ }, 100)
var f = function(){ }
นี่คือจุดที่ JS ได้รับพลังและความยืดหยุ่นมากมาย Java สนับสนุนตัวแรกในระดับหนึ่ง (การใช้งานอินเทอร์เฟซแบบไม่ระบุชื่อ) แต่ไม่ใช่เวอร์ชันหลัง - ดูด้านล่างสำหรับการอัปเดตสำหรับ Java 8
มันไม่ชัดเจนสำหรับฉันว่า (หรือทั้งสองอย่าง) เป็นคำจำกัดความที่เหมาะสมของแลมด้า
JS ไม่ใช่ภาษาแรกที่รองรับคุณสมบัติเหล่านี้อย่างแน่นอน จากความทรงจำฉันคิดว่ามันเป็นเรื่องเล็ก ๆ น้อย ๆ ที่ผู้ที่ชื่นชอบภาษามักจะพูดถึงการสนับสนุน lambdas
BTW: ใน Java คลาสที่ไม่ระบุตัวตนมักใช้เพื่อส่งผ่านนิยามคลาสได้ทันทีสำหรับอาร์กิวเมนต์ (ใช้มากในการแกว่ง) สิ่งนี้ (จากหน่วยความจำไม่ได้รวบรวม):
someGuiContainer(new WidgetInterface()
{
public void importantMethodToDefine(){
}
}
)
อัปเดต
Java เมื่อวันที่ 8 ปัจจุบันเป็นภาษาแลมบ์ดาอย่างเป็นทางการ
ตอนนี้คุณสามารถใช้ไวยากรณ์ต่อไปนี้:
MathOperation addition = (int a, int b) -> a + b;
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
ที่มาของรหัส