более короткий способ написать матч - PullRequest
3 голосов
/ 21 апреля 2011

У меня есть функция, которая возвращает кортеж:

let rec pack l = 
            let combine = List.fold packFunction (' ',[], []) l
            match combine with 
                            | (_,b,a) -> b::a |> List.rev |> List.tail

есть ли способ извлечь части кортежа без использования оператора сопоставления?

т.е.и вне (_, b, a) без использования оператора сравнения

Ответы [ 3 ]

6 голосов
/ 21 апреля 2011

Как то так?

let rec pack l = 
    let _,b,a = List.fold packFunction (' ',[], []) l
    b::a |> List.rev |> List.tail

Вы всегда можете извлечь непосредственно из кортежей:

let a,b = (1,1)

или

let a,b = functionWhichReturnsTuple
2 голосов
/ 21 апреля 2011

Сопоставление с образцом может использоваться во многих местах, кроме match es. В этом случае не похоже, что вам нужно combine вообще (и при этом pack не должно быть рекурсивным) ...

let pack l = 
    let _, b, a = List.fold packFunction (' ', [], []) l
    b::a |> List.rev |> List.tail
1 голос
/ 21 апреля 2011

Еще один способ выразить это (сопоставление с помощью лямбда-аргумента):

let rec pack l =
    List.fold packFunction (' ',[], []) l
    |> fun (_,b,a) -> b::a |> List.rev |> List.tail           
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...