2011-01-17 20 views

Trả lời

22

Có 3 sử dụng cho scope trong D.

  1. scope báo cáo. Đây là khi bạn sử dụng scope(success), scope(failure) hoặc scope(exit). Các câu lệnh trong khối sau được chạy khi thoát khỏi phạm vi mà tuyên bố scope là nếu không có ngoại lệ được ném, nếu một ngoại lệ được ném hoặc bất kể ngoại lệ được ném cho thành công, thất bại và thoát tương ứng. Việc sử dụng scope này sẽ được lưu lại bằng ngôn ngữ.

  2. scope trên biến cục bộ. Điều này đặt biến trên ngăn xếp - ngay cả khi đó là một lớp. Đối tượng bị phá hủy khi nó rời khỏi phạm vi. Việc sử dụng scope này không an toàn và cuối cùng sẽ bị xóa khỏi ngôn ngữ (mặc dù std.typecons.scoped sẽ thay thế cho những người muốn sống một cách nguy hiểm).

  3. scope trên tham số chức năng (đây là trường hợp sử dụng mà bạn đang hỏi). Khi được đặt trên một tham số là một đại biểu, nó có nghĩa là các tham chiếu đến tham số đó không thể được thoát (tức là được gán cho một biến toàn cục). Và khi trình biên dịch thấy điều này trên các đại biểu, nó sẽ tránh phân bổ một đóng cửa khi lấy địa chỉ của một hàm cục bộ. Điều này là cần thiết trong các vòng opApply (reference post on newsgroup). Hiện tại, scope không ảnh hưởng đến bất kỳ tham số chức năng nào khác với đại biểu và bị bỏ qua đối với tất cả các loại khác, mặc dù nó có thể hoặc không có lúc nào đó trong tương lai được mở rộng để ảnh hưởng đến các loại như con trỏ để ngăn chúng thoát khỏi chức năng.

Khi sử dụng trên một số chức năng, từ khóa in là một bí danh cho const scope, mà thường xuyên là cách scope trên các thông số chức năng bị vô tình sử dụng.

+1

Tôi đang tìm kiếm số 3 ... thật tuyệt vời! Tôi luôn tự hỏi làm thế nào để làm điều đó, cảm ơn bạn! :) – Mehrdad

+0

@ Lambert: Có vẻ như điều này không được ghi lại trên trang web D, nhưng tôi đã đưa ra một báo cáo, vì vậy điều này có thể sẽ sớm được thêm vào tài liệu. –

+0

@Andrej: Tuyệt vời, cảm ơn bạn! :) – Mehrdad

0

Tìm kiếm trên mars nhóm tin kỹ thuật số, tôi thấy hai bài bán liên quan về phạm vi trong bối cảnh đó: herehere.

Từ đọc hai bài đăng đó, phạm vi tham số chức năng dường như không làm bất kỳ điều gì hữu ích và nó có khả năng tương thích ngược. Nó thậm chí có vẻ như các phiên bản sau này sau D2 có thể loại bỏ vòng loại đó hoàn toàn.

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