[英]Passing function with parameter, as a parameter and returning a generic type
[英]Function returning type used in a function taking a generic type parameter
所以我有這段代碼:
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中。
您無法做到這一點,“類型安全性”意味着您(編譯器) 靜態地知道類型(無需執行代碼)。 通過強制轉換為obj
您會失去該知識。 添加運行時類型( typeof
)沒有幫助。 即使您可以使用返回的元組的第二個值,對您有什么幫助呢? 您的程序代碼將按照您擁有的true|false
值進行硬編碼。
如果在編譯時不知道該值(例如從控制台讀取),您將采用哪種類型? 應該什么t
在以下的綁定?
let o : t = test someBool someInt
它可以是Zero
或Four
,即Zero | Four
Zero | Four
,即type Either = Zero | Four
type Either = Zero | Four
,那就是
type EitherEnum =
| Z of Zero
| F of Four
...您已經知道了,一個受歧視的工會。
基本上,我想做的是能夠返回這些不同的枚舉,而無需將零和四包裝到DU中。
您已經弄清楚了該怎么做:強制轉換為obj
和松散類型安全性。 您不能同時擁有這兩種方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.