建議使用AutoOpen屬性的原則是什麼?F#中的AutoOpen屬性
(這個問題可能是在延續when to use module function VS static function on similarly named type)
專家F#指出:「當你定義特設頂級運營商 和功能,這是有用的:」
所以這似乎在這裏會減少代碼組織中的模塊角色,當你從技術上需要一個編寫代碼,但是從客戶端角度去除它的存在時。
還有別的嗎? 你什麼時候使用它?
建議使用AutoOpen屬性的原則是什麼?F#中的AutoOpen屬性
(這個問題可能是在延續when to use module function VS static function on similarly named type)
專家F#指出:「當你定義特設頂級運營商 和功能,這是有用的:」
所以這似乎在這裏會減少代碼組織中的模塊角色,當你從技術上需要一個編寫代碼,但是從客戶端角度去除它的存在時。
還有別的嗎? 你什麼時候使用它?
我認爲AutoOpen
屬性的主要用途是當您的庫的用戶打開一個名稱空間時,您想讓某些允許綁定的值可用。這是屬性非常有用的地方,因爲我認爲庫通常應該導出命名空間中的所有定義,但出於某些目的,您需要導出值,並且值不能在命名空間內定義。
這裏是從F# async extensions的示例,其限定了計算助洗劑,因此它需要導出asyncSeq
值(但在同一時間,所有的功能被包裹在一個命名空間):
namespace FSharp.Async
type AsyncSeq<'T> = (* ... *)
type AsyncSeqBuilder() = (* ... *)
[<AutoOpen>]
module GlobalValues =
let asyncSeq = AsyncSeqBuilder()
的用戶圖書館可以只寫open FSharp.Async
,他們會看到asyncSeq
。我認爲同樣的模式被用於各種數學庫(您也想導出簡單命名函數。)
對於模塊(例如List
和Seq
),我想大多數人不使用open
和訪問通過模塊名稱(例如List.map
)來實現功能,所以儘管您可以將它用於嵌套模塊,但我還沒有經常看到。
您使用VALUES清楚地告訴您如何使用它。 THKS – nicolas