将区分联合大小写转换为字符串
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
.
我正在使用 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
.