写比赛的方式更短

时间:2011-04-20 20:52:20

标签: f#

我有一个返回元组的函数:

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

有没有办法在不使用匹配语句的情况下提取元组的部分?

即,id喜欢在不使用匹配语句的情况下获取b和a(_,b,a)

3 个答案:

答案 0 :(得分:6)

这样的东西?

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

答案 1 :(得分:2)

模式匹配可以在除match之外的许多地方使用。在这种情况下,您似乎根本不需要combine(似乎pack也不需要递归)...

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

答案 2 :(得分:1)

另一种方式(通过lambda参数进行模式匹配):

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