所以我有這樣的代碼:函數返回一個函數使用的類型採取了泛型類型參數
type Zero = One = 1 | Two = 2 | Three = 3
type Four = Five = 5 | Six = 6 | Seven = 7
let test_1 (x : bool) : Type =
if x
then typeof<Zero>
else typeof<Four>
let test_2() =
let ty = test_1 true
let e = enum<ty>(1)
...
但是在最後一行,我得到一個錯誤:Type ty not defined.
有什麼建議?
編輯:
或者,也許是這樣的:
let test_3 (x : bool) (i : int) : obj =
if x
then enum<Zero>(i) :> obj
else enum<Four>(i) :> obj
我想會有一些方法來恢復類型安全?
也許這樣?
let test_4 (x : bool) (i : int) : obj * Type =
if x
then enum<Zero>(i) :> obj, typeof<Zero>
else enum<Four>(i) :> obj, typeof<Four>
然後用它作爲這樣:
let test_5() =
let v,t = test_4 true 1
let o = v :?> t
...
這抱怨與T中的最後一行沒有定義。
基本上我想要做的就是能夠返回這些不同的枚舉而不訴諸包裝零和四個DU。
類型參數必須是靜態已知的,它們不能是動態計算的結果。 – kvb
在運行時存在'Type'實例; 'enum'需要一個編譯時參數。 – ildjarn