将区分联合大小写转换为字符串

Converting Discriminated Union case to string

我正在使用 F# 开发一个 FAKE 项目 - 我对 F# 或函数式优先编程并不流利,主要从事前端格式化。我正在尝试根据分配给它的 class 变量来设置项目的颜色。我在将其转换为字符串或在 if 语句中使用时遇到问题。我知道这不太可能,但是否有 F# 开发人员可能在这方面有经验?

class:

type State =
    | New
    | Open
    | Closed
    | Archived

要重新着色的项目:

  td [ ClassName "text-center" ] [ statusTag appt.state ]

我主要是一名 C# 开发人员,因此 F# 做事的方式非常陌生。通常我只会创建一个 if 语句并使用 .ToString() 将状态插入其中,然后使用它来重新设置样式,但我对如何使用 F# 进行处理感到困惑。任何帮助将不胜感激。

通常的方法是使用 match 表达式检查您的值:

let stateToColor state = 
    match state with
    | New -> "red"
    | Open -> "green"
    | Closed -> "blue"
    | Archived -> "yellow"

当然你也可以使用 if 表达式,就像在 C# 中一样:

let stateToColor state =
    if state = New then "red"
    elif state = Open then "green"
    elif state = Closed then "blue"
    else "yellow"

虽然后者不太安全:如果您稍后添加另一个 State 并忘记将其也添加到 stateToColor,如果您使用 match,编译器将捕获您] 表达式,但不适用于 if/then/else.