【问题标题】:Is there a shorthand for Boolean `match` expressions?是否有布尔“匹配”表达式的简写?
【发布时间】:2022-01-15 14:55:51
【问题描述】:

这里有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

我假设像match isVertical with 这样的表达式非常常见,以至于有一个像function 这样的简写,不是吗?

【问题讨论】:

    标签: f# pattern-matching


    【解决方案1】:

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

        let cssClasses =
            let cssDefault = [ "tile"; "is-parent" ]
            if isVertical then
                cssDefault @ [ "is-vertical" ]
            else cssDefault
    

    引用 F# docs:

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

    【讨论】:

      【解决方案2】:

      这有点离题,但您可以使用Sequence Expressions 来构建您的列表,恕我直言,这对于这个用例来说更具可读性。

      let cssClasses = [
          "tile"
          "is-parent"
          if isVertical then
              "is-vertical"
      ]
      

      【讨论】:

      • 我同意谢谢!
      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 2016-07-13
      • 2016-02-20
      • 1970-01-01
      相关资源
      最近更新 更多