Tôi nhận ra mình đã trễ năm trả lời câu hỏi này, nhưng tôi đã xem qua câu hỏi này trong khi thực hiện tìm kiếm trên web và tôi muốn sửa một số thông tin sai lệch được đăng ở đây.
"Đóng cửa" chỉ có nghĩa là đối tượng có thể gọi chứa cả mã và môi trường cung cấp các ràng buộc cho các biến miễn phí trong mã đó. Môi trường đó thường là một môi trường từ vựng, nhưng không có lý do kỹ thuật nào tại sao nó không thể là một môi trường năng động.
Bí quyết là đóng mã trên môi trường chứ không phải các giá trị cụ thể. Đây là những gì Lisp 1.5 đã làm, và cũng là những gì MACLisp đã làm cho "funargs xuống."
Bạn có thể xem như thế nào Lisp 1.5 đã làm điều này bằng cách đọc 1,5 thủ Lisp tại http://www.softwarepreservation.org/projects/LISP/book
Đặc biệt chú ý tại Phụ lục B để eval xử lý CHỨC NĂNG thế nào và làm thế nào áp dụng xử lý FUNARG.
Bạn có thể nhận được hương vị cơ bản của lập trình sử dụng đóng cửa động từ http://c2.com/cgi/wiki?DynamicClosure
Bạn có thể nhận được một trong phần giới thiệu sâu vào vấn đề thực hiện từ ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-199.pdf
Modern động scoped ngôn ngữ thường sử dụng cạn ràng buộc, nơi hiện tại giá trị của mỗi biến được lưu giữ ở một vị trí toàn cục và các cuộc gọi hàm sẽ lưu các giá trị cũ lên trên ngăn xếp. Một cách để triển khai các bao đóng động với ràng buộc nông được mô tả tại http://www.pipeline.com/~hbaker1/ShallowBinding.html
Tôi sẽ không chỉnh sửa câu trả lời nhưng: "Thông thường" là sai - đóng luôn luôn "đóng cửa từ vựng", được đặt tên theo cách này vì chúng đóng biểu thức môi trường từ vựng. Đối với lambdas được an toàn - không có khả năng sử dụng lambdas vì các bao đóng sẽ làm giảm giá trị của chúng, nhưng ngay cả khi không có điều đó, phạm vi động vốn không tốt cho sức khỏe của chương trình vì bạn không thể chắc chắn về ý nghĩa của bất kỳ ràng buộc nào. –
Cảm ơn bạn đã liên kết funargs. Tôi chưa bao giờ biết điều này trước đây. –
@Eli Barzilay: Bạn nói đúng, tôi đã quá mơ hồ. Tôi sẽ loại bỏ 'thường'. Đối với sức khỏe chương trình nói chung, tôi hoàn toàn đồng ý, nhưng câu hỏi không phải là chung chung. Như tôi đã nói, lambdas có phạm vi động về an toàn như những con trỏ không hạn chế ... –