F #, Deedle: Generi c Frame, ограниченный типом Frame <obj, obj> - PullRequest
1 голос
/ 19 марта 2020

У меня есть функция, которая получает объект obj и пытается угадать, является ли она строкой, фреймом Дедла или чем-то еще:

let exampleF (data : obj) =
    match data with
    | :? string as s -> "string: " + s
    | :? Frame<'a,'b> as d -> "Frame"
    | _ -> "something else"

Проблема в том, что Frame <'a,' b> ограничен набрать Frame . Так что, если бы у меня был someFrame типа Frame , exampleF вывел бы «что-то еще». Однако, если в exampleF есть другая ветка с «:? Frame as d -> ”, someFrame будет правильно перехвачен.

Как я могу захватить все кадры в шаблоне, подобном такому, без указания внутренних типов?

1 Ответ

1 голос
/ 19 марта 2020

Джим Фой помог мне найти ответ:

let exampleF data =
    match data.GetType() with
    | typ when typ.IsGenericType && typ.GetGenericTypeDefinition() = typedefof<Frame<_,_>> -> "Frame"
    | typ when typ = typeof<string> -> "string"
    | _ -> "something else"
...