布尔“match”表达式有简写吗?

ras*_*asx 5 f# pattern-matching

match这里的表达式有简写吗isVertical

let bulmaContentParentTile isVertical nodes =
    let cssClasses =
        let cssDefault = [ "tile"; "is-parent" ]
        match isVertical with
        | true -> cssDefault @ [ "is-vertical" ]
        | _ -> cssDefault

    div [ attr.classes cssClasses ] nodes

Run Code Online (Sandbox Code Playgroud)

我认为像这样的表达方式match isVertical with是如此常见,以至于有一个类似于我们的 for 的简写function,不是吗?

bri*_*rns 7

是的,这只是一个if- 表达式:

    let cssClasses =
        let cssDefault = [ "tile"; "is-parent" ]
        if isVertical then
            cssDefault @ [ "is-vertical" ]
        else cssDefault
Run Code Online (Sandbox Code Playgroud)

引用 F#文档

与其他语言不同,该if...then...else构造是一个表达式,而不是一个语句。这意味着它会产生一个值,该值是执行的分支中最后一个表达式的值。


Dan*_*iel 7

这有点偏离主题,但您可以使用序列表达式构建列表,恕我直言,对于此用例来说,序列表达式更具可读性。

let cssClasses = [
    "tile"
    "is-parent"
    if isVertical then
        "is-vertical"
]
Run Code Online (Sandbox Code Playgroud)