Существует ли сокращение для логических выражений «совпадения»?

#f# #pattern-matching

#f# #сопоставление с образцом

Вопрос:

Существует ли сокращение для 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

 

Я предполагаю, что выражение like match isVertical with настолько распространено, что существует сокращение, подобное тому, которое у нас есть function , нет?

Ответ №1:

Да, это просто if выражение:

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

Цитирование из документов F #:

В отличие от других языков, if...then...else конструкция представляет собой выражение, а не оператор. Это означает, что он выдает значение, которое является значением последнего выражения в выполняемой ветви.

Ответ №2:

Это немного не по теме, но вы можете создать свой список, используя выражения последовательности, которые, ИМХО, более удобочитаемы для данного варианта использования.

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

Комментарии:

1. я согласен, спасибо!