假設我有一個很大的區分聯合類型:在F#中,是否可以檢查兩個值是否具有相同的構造函數?
type Thing =
| One of int
| Two of string
| Three of bool option
...
而且我有這樣的功能:
let comp a b = match a, b with
| One _, One _ -> true
| Two _, Two _ -> true
...
| _, _ -> false
有沒有寫在一個整潔的功能的方式,不需要短的方式我列出每一個構造函數?
你可以使用[反映](https://docs.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/reflection):'讓comp ab = a.GetType()= b.GetType()' – Funk
@Funk我沒有意識到它會非常簡潔。這是否有缺點? – TheQuickBrownFox
@TheQuickBrownFox:它利用了DU案例如何編譯成IL中的嵌套類。從實際的角度來看,這不是一個巨大的缺點,但重要的是要認識到F#結構如何編譯到IL中(這並不總是直截了當),因爲這是使用反射API時工作的層。 – scrwtp