F# 匿名函数,流水线



我试图从我的 f# 课程开始就理解 lambda 函数,但有时仍然难以阅读和使用它们。

let wordCount = "aaa aaa".Split [| ' ' |]
wordCount.Length // 2
let letterCount = wordCount |> Array.sumBy (fun w -> w.Length) 

我如何理解上面的几行:前两行很简单,第三行是我不明白的。由于wordCount是一个字符串数组[|"aaa"; "aaa"|]Array.sumBy (fun w -> w.Length)怎么知道数组是作为参数传递的,并且(fun w -> w.Length)正常工作。sumBy 只是在数组的每个元素上执行 anon 函数吗?这在 .map 和其他此类方法上是否相同?

还有一个小问题,区别 顺便说一句>> 和 |>?

用作x |> f|>运算符采用两个参数fx。然后,它将x传递给f作为参数,即调用f x

这意味着:wordCount |> Array.sumBy (fun w -> w.Length)
与:Array.sumBy (fun w -> w.Length) wordCount相同

现在,Array.sumBy f input是一个函数,它将f应用于输入数组input中的所有项目,并对各个元素返回的数字求和。

因此,如果您有:Array.sumBy (fun w -> w.Lenght) [| "aa"; "b" |]
这与((fun w -> w.Lenght) "aa") + ((fun w -> w.Lenght) "b")
相同,这只是:"aa".Length + "b".Length,这就是3

函数组合运算符f >> g接受函数fg,并生成一个新的函数(fun x -> g (f x)),该函数接受输入,将其传递给f,然后将结果传递给g

相关内容

  • 没有找到相关文章

最新更新