Tôi nghĩ rằng việc sử dụng chính cho thuộc tính AutoOpen
là khi bạn muốn tạo một số giá trị được gắn sẵn khi người dùng thư viện của bạn mở một vùng tên. Đây là nơi thuộc tính rất hữu ích, vì tôi nghĩ rằng các thư viện thường xuất tất cả các định nghĩa trong các không gian tên, nhưng đối với một số mục đích bạn cần xuất giá trị và không thể xác định giá trị bên trong không gian tên.
Dưới đây là một ví dụ từ F# async extensions trong đó xác định một người thợ xây tính toán và do đó nó cần phải xuất khẩu asyncSeq
giá trị (nhưng cùng một lúc, tất cả các chức năng được bọc trong một không gian tên):
namespace FSharp.Async
type AsyncSeq<'T> = (* ... *)
type AsyncSeqBuilder() = (* ... *)
[<AutoOpen>]
module GlobalValues =
let asyncSeq = AsyncSeqBuilder()
Người sử dụng của thư viện chỉ có thể viết open FSharp.Async
và họ sẽ thấy asyncSeq
. Tôi nghĩ rằng cùng một khuôn mẫu được sử dụng với các thư viện toán học khác nhau (trong đó bạn cũng muốn xuất đơn giản hàm được đặt tên.)
Đối với module (ví dụ List
và Seq
), tôi nghĩ rằng hầu hết những người không sử dụng open
và truy cập chức năng thông qua một tên mô-đun (chẳng hạn như List.map
), vì vậy mặc dù bạn có thể sử dụng điều này cho các mô-đun lồng nhau, tôi đã không thấy điều đó thường xuyên.
Nguồn
2012-10-19 15:55:49
Việc bạn sử dụng VALUES làm rõ cách sử dụng nó. thks – nicolas