この属性の主な用途はAutoOpen
、ライブラリのユーザーが名前空間を開いたときに、いくつかの let バインドされた値を利用できるようにする場合だと思います。ライブラリは通常、名前空間内のすべての定義をエクスポートする必要があると思いますが、一部の目的では値をエクスポートする必要があり、値を名前空間内で定義することはできないため、これは属性が非常に役立つ場所です。
計算ビルダーを定義するF# 非同期拡張機能の例を次に示します。したがって、値をエクスポートする必要がありasyncSeq
ます (ただし、同時に、すべての機能は名前空間にラップされます)。
namespace FSharp.Async
type AsyncSeq<'T> = (* ... *)
type AsyncSeqBuilder() = (* ... *)
[<AutoOpen>]
module GlobalValues =
let asyncSeq = AsyncSeqBuilder()
ライブラリのユーザーは、書き込むだけopen FSharp.Async
で が表示されますasyncSeq
。さまざまな数学ライブラリで同じパターンが使用されていると思います(単純な名前の関数もエクスポートしたい場合)。
モジュール (例:List
および) の場合、ほとんどの人はモジュール名 ( など) を介して関数をSeq
使用したりアクセスしたりしないと思います。したがって、これをネストされたモジュールに使用することはできますが、それほど頻繁には見たことがありません。open
List.map