将区分联合的情况转换为字符串

问题描述

我正在使用F#进行FAKE项目-我不太熟练F#或功能优先的编程,并且主要进行前端格式化。我试图根据分配给它的类变量设置项目的颜色。我在将其转换为字符串或在if语句中使用它时遇到问题。我知道这是一个长期的尝试,但是那里有F#开发人员可能在这方面有经验吗?

课程:

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