F#,Deedle:限制为类型 Frame< obj,obj > 的通用框架
F#, Deedle: Generic Frame constrained to type Frame< obj,obj >
我有一个接收对象并尝试猜测它是字符串、Deedle Frame 还是其他东西的函数:
let exampleF (data : obj) =
match data with
| :? string as s -> "string: " + s
| :? Frame<'a,'b> as d -> "Frame"
| _ -> "something else"
问题是 Frame<'a,'b> 被限制为类型 Frame< obj,obj >。因此,如果我有 Frame 类型的 someFrame,exampleF 将输出“其他内容”。但是,如果 exampleF 有另一个带有“:? Frame< int,string > as d ->”, someFrame 会被正确捕获。
如何在不指定内部类型的情况下捕获模式匹配中的所有帧?
Jim Foye 帮我找到了答案:
let exampleF data =
match data.GetType() with
| typ when typ.IsGenericType && typ.GetGenericTypeDefinition() = typedefof<Frame<_,_>> -> "Frame"
| typ when typ = typeof<string> -> "string"
| _ -> "something else"
我有一个接收对象并尝试猜测它是字符串、Deedle Frame 还是其他东西的函数:
let exampleF (data : obj) =
match data with
| :? string as s -> "string: " + s
| :? Frame<'a,'b> as d -> "Frame"
| _ -> "something else"
问题是 Frame<'a,'b> 被限制为类型 Frame< obj,obj >。因此,如果我有 Frame
如何在不指定内部类型的情况下捕获模式匹配中的所有帧?
Jim Foye 帮我找到了答案:
let exampleF data =
match data.GetType() with
| typ when typ.IsGenericType && typ.GetGenericTypeDefinition() = typedefof<Frame<_,_>> -> "Frame"
| typ when typ = typeof<string> -> "string"
| _ -> "something else"