编程语言
首页 > 编程语言> > F# 函数式编程之 - 乾坤大挪移(对象变参数)

F# 函数式编程之 - 乾坤大挪移(对象变参数)

作者:互联网

标题所说的 “乾坤大挪移” 是指将面向对象编程中的 “对象” 换个位置,使其变成函数式编程中的函数的 “参数”,以便符合 F# 的编程风格。

之所以能进行这种挪移,是因为 F# 虽然以函数式为主,但已经被扩充成也支持对象(虽然不是 “纯函数式” 听起来不够酷,但更实用更好用了,如果 F# 是纯函数式我反而没兴趣)。

在 F# 里,字符串是对象,它有方法:

let hello = "hejjo".Replace("j", "l")

但这样操作,很不F#, 函数式编程的感觉出不来,所以我们下面来进行挪移:

let replace oldStr newStr (s:string) = 
  s.Replace(oldValue=oldStr, newValue=newStr)

这样我们得到了一个函数 replace, 它可以用 F# 的风格来操作:

"hejjo" |> replace "j" "l"

特别是与其他函数配合时,就更能体现 F# 风格的优雅:

// 例子出处: https://fsharpforfunandprofit.com/posts/partial-application/

let replace oldStr newStr (s:string) = 
  s.Replace(oldValue=oldStr, newValue=newStr)

let startsWith lookFor (s:string) = 
  s.StartsWith(lookFor)

let result = 
     "hello" 
     |> replace "h" "j" 
     |> startsWith "j"

["the"; "quick"; "brown"; "fox"] 
     |> List.filter (startsWith "f")

let compositeOp = replace "h" "j" >> startsWith "j"
let result = compositeOp "hello"

本文内容比较简短,主要介绍了 F# 支持面向对象,并介绍了将面向对象改写成函数式的一个示例。

标签:startsWith,函数,oldStr,挪移,编程,replace,let,乾坤,newStr
来源: https://www.cnblogs.com/ai42/p/14083559.html