从 F# 中的字符串中剥离字符
Stripping chars from string in F#
我是函数式编程和 F# 的新手,肯定有很多关于如何在 F# 中执行此操作(从字符串中删除特定字符)的信息,但我遇到了以下函数,希望能提供一些帮助准确理解发生了什么:
let stripchars chars str =
Seq.fold
(fun (str: string) chr ->
str.Replace(chr |> Char.ToUpper |> string, "").Replace(chr |> Char.ToLower |> string, ""))
str chars
我通过在我这样定义的拆分函数中调用它来使用 stripchars 函数:
let split (str : string) =
((stripchars "?,.,!,," str).Split ' ') |> Array.toList
我现在很难理解的是,在函数 stripchars 中,当参数 "chars" 被传递时,包含要从字符串 str 中删除的字符序列,它甚至没有在代码直到最后一行 "str chars"。那么这是如何工作的呢?
正如 Guy Coder 在上面的评论中指出的那样,函数体具有非正统的格式。如果将累加器函数提取到内部嵌套函数,它可能更具可读性:
let stripchars chars str =
let removeOneChar (str : string) chr =
str.Replace(chr |> Char.ToUpper |> string, "").Replace(chr |> Char.ToLower |> string, "")
Seq.fold removeOneChar str chars
这个函数的return值为最后一个表达式,Seq.fold removeOneChar str chars
.
removeOneChar
函数的类型为 string -> char -> string
。
我是函数式编程和 F# 的新手,肯定有很多关于如何在 F# 中执行此操作(从字符串中删除特定字符)的信息,但我遇到了以下函数,希望能提供一些帮助准确理解发生了什么:
let stripchars chars str =
Seq.fold
(fun (str: string) chr ->
str.Replace(chr |> Char.ToUpper |> string, "").Replace(chr |> Char.ToLower |> string, ""))
str chars
我通过在我这样定义的拆分函数中调用它来使用 stripchars 函数:
let split (str : string) =
((stripchars "?,.,!,," str).Split ' ') |> Array.toList
我现在很难理解的是,在函数 stripchars 中,当参数 "chars" 被传递时,包含要从字符串 str 中删除的字符序列,它甚至没有在代码直到最后一行 "str chars"。那么这是如何工作的呢?
正如 Guy Coder 在上面的评论中指出的那样,函数体具有非正统的格式。如果将累加器函数提取到内部嵌套函数,它可能更具可读性:
let stripchars chars str =
let removeOneChar (str : string) chr =
str.Replace(chr |> Char.ToUpper |> string, "").Replace(chr |> Char.ToLower |> string, "")
Seq.fold removeOneChar str chars
这个函数的return值为最后一个表达式,Seq.fold removeOneChar str chars
.
removeOneChar
函数的类型为 string -> char -> string
。