2010-05-02 46 views

Trả lời

10

Không, C không hỗ trợ cho biểu thức lambda.

Nếu bạn sẵn sàng sử dụng C++, Boost có thư viện mô phỏng lambdas. Ngoài ra, C++ 0x sẽ hỗ trợ sẵn cho các biểu thức lambda.

Không có nhu cầu lớn về hỗ trợ biểu thức lambda trong C vào thời điểm đó, vì vậy ngôn ngữ không hỗ trợ nó.

+1

... yêu bạn. Và bây giờ tôi yêu Stack Overflow, bởi vì điều đó đã nhanh chóng! – shosh

3

Không, C không có biểu thức lambda (hoặc bất kỳ cách nào khác để tạo bao đóng).

Điều này rất có thể vì C là ngôn ngữ cấp thấp giúp tránh các tính năng có thể có hiệu suất kém và/hoặc làm cho ngôn ngữ hoặc hệ thống thời gian chạy phức tạp hơn.

5

C không hỗ trợ biểu thức lambda, cũng như bất kỳ cách nào khác (trong tiêu chuẩn ngôn ngữ) để tự động tạo chức năng - tất cả chức năng, theo tiêu chuẩn, được tạo tại thời gian biên dịch. Tôi đoán lý do là giữ ngôn ngữ nhỏ, đơn giản, gọn gàng và rất nhanh, hầu như không cần bất kỳ hỗ trợ "thư viện thời gian chạy" nào - rất quan trọng cho một ngôn ngữ được sử dụng rộng rãi trong các hệ điều hành lập trình, trình điều khiển thiết bị, ứng dụng nhúng và v.v.

+5

Biểu thức Lambda không yêu cầu tạo động một hàm. Nó chỉ tạo một đối tượng đề cập đến một hàm (có thể không tên) đã được biên dịch. –

+0

@ Tương tự, trong C bạn có thể tham chiếu đến các hàm hiện có thông qua một con trỏ (thực sự, một _mention_ của tên hàm "phân rã" thành con trỏ, vì vậy nó khá thanh lịch và có thể làm được). –

+1

Tôi nghĩ Mike có một điểm. Bạn có thể trong lý thuyết có trong C một cú pháp kiểu lambda không có bao đóng, để định nghĩa bên trong một biểu thức một hàm như 'x => x * x' và đánh giá con trỏ tới hàm đó, tất cả mà không phá vỡ ràng buộc mà bạn đề cập. Chỉ khi bạn muốn lambda của bạn truy cập vào phạm vi xung quanh của nó thì nó trở thành không thể với một con trỏ hàm C điển hình chỉ bao gồm địa chỉ của mã. Cho dù các chức năng không có bối cảnh đó có được gọi là "lambdas" hay không, tôi không biết. –

Các vấn đề liên quan