4
根據文檔,形式爲 : enum<underlying-type>
的枚舉類型約束「不適用於通用」。它意味着什麼是罕見的用途?用於F#枚舉類型約束的用例?
根據文檔,形式爲 : enum<underlying-type>
的枚舉類型約束「不適用於通用」。它意味着什麼是罕見的用途?用於F#枚舉類型約束的用例?
跳轉想到的第一件事是包裝的System.Enum
成員與強類型的包裝:
// gets all underlying values for which an enum is defined
let definedVals<'a, 'b when 'a : enum<'b>> =
System.Enum.GetValues(typeof<'a>)
|> Seq.cast<'a>
|> Seq.map (LanguagePrimitives.EnumToValue)
let ints = definedVals<System.ConsoleColor,_>
不得不思考這一個了一段時間,但現在明白了,這是一個很好的例子。謝謝。 我困惑了一陣子的是System.Enum.GetValues()似乎並不需要約束,但LanguagePrimitives.EnumToValue會。我想這是事實,前者是在一般使用.NET庫,不知道F#約束。另一方面,類型約束並不是F#所特有的(C#泛型有它們),所以我認爲應該有一種方法讓它們工作在跨語言環境中。 無論如何,就我原來的問題而言,它已被回答。 – 2010-09-12 12:52:35