【问题标题】:Use case for F# Enumeration Type Constraint?F# 枚举类型约束的用例?
【发布时间】:2010-09-10 13:58:04
【问题描述】:

根据文档,表单的枚举类型约束 : enum<underlying-type> 是“不适合常用”。它的用途是什么?

【问题讨论】:

    标签: f#


    【解决方案1】:

    首先想到的是用强类型包装器包装System.Enum 的成员:

    // gets all underlying values for which an enum is defined
    let definedVals<'a, 'b when 'a : enum<'b>> = 
      System.Enum.GetValues(typeof<'a>) 
      |> Seq.cast<'a> 
      |> Seq.map (LanguagePrimitives.EnumToValue)
    
    let ints = definedVals<System.ConsoleColor,_>
    

    【讨论】:

    • 不得不考虑这个问题,但现在明白这是一个很好的例子。谢谢。让我困惑了一段时间的是 System.Enum.GetValues() 似乎根本不需要约束,但 LanguagePrimitives.EnumToValue 需要。我想这是因为前者在一般使用的 .NET 库中,并且不知道 F# 约束。另一方面,类型约束并不是 F# 独有的(C# 泛型有它们),所以我认为应该有一种方法可以让它们跨语言工作。无论如何,就我最初的问题而言,它已经得到了回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多