Tôi tự hỏi sự khác biệt về triển khai kỹ thuật giữa C # và Scala là gì và làm thế nào cả hai giải pháp so sánh với các ý tưởng triển khai và mối quan tâm được gửi trong email Peek Past lambda của Brian Goetz, được gửi đến danh sách gửi thư của Dự án Lambda (JSR 335) ?
Từ email:
Chúng tôi đã khám phá con đường "có lẽ lambdas chỉ là những trường hợp bên trong, điều đó thực sự đơn giản", nhưng cuối cùng đã đến với vị trí "các chức năng là một hướng tốt hơn cho tương lai của ngôn ngữ".
và xa hơn:
Quan điểm của lambdas là đối tượng của thế giới xung đột với tương lai có thể này. Quan điểm của lambdas là các chức năng của thế giới thì không, và bảo tồn tính linh hoạt này là một trong những điểm có lợi cho việc không gây gánh nặng cho lambdas thậm chí với sự xuất hiện của đối tượng.
Phần kết luận:
Lambdas-are-chức năng mở cửa. Lambdas-are-object đóng chúng lại.
Chúng tôi muốn thấy những cánh cửa còn bỏ ngỏ.
Và một số bình luận từ một người trên chủ đề Reddit nói:
Tôi thực sự đã gửi email cho Neal Gafter về điều này và với sự hiểu biết hạn chế của tôi về giải thích C # của anh ấy và thiết kế Java hiện tại khá giống nhau ở chỗ các Đại biểu thực sự là các đối tượng và không phải là các loại hàm. Có vẻ như ông tin rằng Java nên học hỏi từ những nhược điểm của lambdas của C # và tránh chúng (giống như C # đã học được từ những bất lợi của Java và tránh chúng ngay từ đầu).
Tại sao phương pháp "Lambdas-are-chức năng" cho phép nhiều cơ hội hơn trong tương lai hơn "Lambdas-are-object"? Ai đó có thể giải thích sự khác biệt tồn tại và cách chúng ảnh hưởng đến cách viết mã?
Thấy mọi thứ trong Scala "chỉ hoạt động", tôi cứ nghĩ rằng tôi đang thiếu một cái gì đó về các cách tiếp cận được thực hiện / đề xuất trong C # / Java (8), có lẽ nó liên quan đến mối quan tâm về khả năng tương thích ngược?