Итак, у меня есть этот код:
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.
В основном то, что я пытаюсь сделать, - это иметь возможность возвращать эти разные перечисления, не прибегая к обертыванию Zero и Four в DU.
Type
существует во время выполнения;enum
ожидает аргумент времени компиляции. - person ildjarn   schedule 18.02.2017