在F#中使用模式匹配的最佳方法是什么?

时间:2016-01-14 00:24:06

标签: f# pattern-matching tuples inline

创建一个带有两个参数的函数,一个整数和一个五元素的整数元组,如果元组的任何三个元素的总和大于第一个参数,则返回true,否则为false。

let func el tupl =
    match tupl with
    |(a,b,c,d,e) when (a+b+c) > el || (a+d+e) > el || (b+c+d)> el || (b+c+e) > el -> true
    | _-> false

1 个答案:

答案 0 :(得分:12)

在这种情况下使用显式public ActionResult Member(string sortOrder, string filter, string searchString, int? page, **bool? condition = false**) 表达式并没有什么优势,您可以使用match警卫来解决问题,正如您在问题中所建议的那样但是它传达了很多想法对你负担。

这是另一种选择:

when

注意:我创建了函数let inline func el (a,b,c,d,e) = let sum3 = [a; b; c; d; e] // create a list of elements |> List.sortDescending // sort list by descending |> List.take 3 // take the 3 largest elements |> List.sum // sum them sum3 > el // if not true for 3 largest, it's not true for any ,因此它适用于支持inlinecomparison的任何类型。您可以删除+并接受,例如inline