Как напрямую применить функцию к значению выражения соответствия в F #

Предполагая, что у меня есть

let someFunction someVar =
  let x = 
    match someVar with
    | Value1 -> 10
    | Value2 -> 20
  anotherFunction x

Есть ли способ напрямую применить anotherFunction к возврату выражения соответствия без использования вспомогательной переменной x?


person Victor Panisa    schedule 09.09.2020    source источник


Ответы (3)


Да, вы можете просто применить его напрямую.

let someFunction someVar =
    anotherFunction( 
        match someVar with
        | Value1 -> 10
        | Value2 -> 20)

Как и большинство других вещей в F #, блоки совпадений - это выражения, которые вы можете использовать встроенными, если считаете, что это улучшает ваш код. Я не уверен, что в данном случае это предпочтительнее.

person scrwtp    schedule 09.09.2020

Если имя someVar не важно, вы можете использовать композицию функции как способ выразить функцию:

let someFunction =
    function
    | Value1 -> 10
    | Value2 -> 20
    >> anotherFunction

Ключевое слово function является синтаксическим сахаром для fun x -> match x with... Оператор >> берет функцию и применяет ее к другой функции.

person tranquillity    schedule 09.09.2020

Существующие ответы показывают вам, как делать то, что вы хотите, но если бы я писал код, я бы просто повторил вызов функции внутри совпадения - я предпочитаю это, потому что оно помещает небольшое выражение (вызов функции) внутри большого выражения (шаблон соответствие). Наоборот, вы получите большое выражение внутри маленького, что делает синтаксис менее понятным (на мой взгляд).

Если вы также используете function, чтобы избежать someVar, он превратится в аккуратный трехстрочный текст:

let someFunction = function
  | Value1 -> anotherFunction 10
  | Value2 -> anotherFunction 20
person Tomas Petricek    schedule 10.09.2020