F#:如何匹配子字符串?

时间:2014-07-28 21:00:18

标签: f# match

我是F#的新手,但不是编程新手。我的大部分经验都是在C#和SQL世界中。 MSDN和我看过的其他网站还没有让我的小脑子变得那么简单,所以我想知道你是否能给我一个正确方向的推动。

我正在尝试编写一个简单的函数,如果字符串为null,为空,或以“//”开头,则返回true,否则返回false。

#light

let thisIsACommentOrBlank line =
    match line with
    | null -> true
    | "" -> true
    | notSureWhatToPutHere -> true
    | _ -> false

谢谢!

更新

感谢您的所有建议,最终,我能够将所有内容折叠为lambda,如下所示:

|> List.filter (fun line -> not (System.String.IsNullOrWhiteSpace(line) || line.StartsWith("//")))

再次感谢。

4 个答案:

答案 0 :(得分:4)

这是一种方法:

let thisIsACommentOrBlank line =
    match line with
    | a when System.String.IsNullOrWhiteSpace(a) || a.StartsWith("//") -> true
    | _ -> false;;

答案 1 :(得分:3)

您可以使用when子句,如下所示:

let thisIsACommentOrBlank line =
    match line with
    | null -> true
    | "" -> true
    | s when s.StartsWith "//" -> true
    | _ -> false

但就此而言,这更简单:

let thisIsACommentOrBlank line = 
    (String.IsNullOrEmpty line) || (line.StartsWith "//")

答案 2 :(得分:2)

你可以省略最后一场比赛:

let thisIsACommentOrBlank line =
    match line with
    | null -> true
    | "" -> true
    | s -> s.StartsWith "//"

答案 3 :(得分:2)

您可以在条件时使用(请参阅here):

let thisIsACommentOrBlank line =
    match line with
    | null -> true
    | "" -> true
    | s when s.StartsWith "//" -> true
    | _ -> false

但您的功能可以优化:

let thisIsACommentOrBlank = function
| null | "" -> true
| s -> s.StartsWith "//"