【问题标题】:F#, Deedle: Generic Frame constrained to type Frame< obj,obj >F#,Deedle:通用框架限制为 Frame<obj,obj> 类型
【发布时间】:2020-06-30 01:46:45
【问题描述】:

我有一个函数,它接收一个 obj 并尝试猜测它是一个字符串、一个 Deedle Frame 还是其他东西:

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

问题在于 Frame 被限制为 Frame 类型。因此,如果我有一些 Frame 类型的Frame,exampleF 将输出“其他东西”。但是,如果 exampleF 有另一个带有“ :? Frame as d ->”, someFrame 会被正确捕获。

如何在不指定内部类型的情况下以这样的模式匹配捕获所有帧?

【问题讨论】:

  • 已有一些关于 SO 的讨论,例如,参见 stackoverflow.com/questions/39875110/…
  • 非常感谢,吉姆。我在问问题之前进行了搜索,但似乎我没有选择正确的搜索词。

标签: .net functional-programming f# deedle


【解决方案1】:

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"

【讨论】:

    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多