具有多个参数的函数管道,其中一个参数是通用列表

时间:2014-11-25 12:46:15

标签: f# functional-programming

我正在尝试执行功能流水线操作,但我不能让它适用于多个函数参数,其中一个参数是通用列表。

let function1(list:System.Collections.Generic.List<Person>, x:int) =
     // does stuff returns a new list but for demo purposes I will just return list passed in
     list

let function2(list:System.Collections.Generic.List<Person>, x:int) =
     // does stuff returns a new list but for demo purposes I will just return list passed in
     list

然后我尝试创建一个流水线函数,但是通过执行以下操作它不起作用:

myPipelinedFunction initialPersonList = function1 10 |> function2 300

编译器抱怨&#34;表达式应该具有类型&#39; a * int但是这里的类型为int&#34;

我做错了什么明显的? 任何帮助都非常感谢...

1 个答案:

答案 0 :(得分:3)

如果你想使用流水线技术,你需要编写你的功能:

  • 采取多个参数而不是采用元组
  • 列表是最后一个参数

例如:

let function1 (x:int) (list:System.Collections.Generic.List<Person>) =
   // does stuff returns a new list but for demo 
   // purposes I will just return list passed in
   list

let function2 (x:int) (list:System.Collections.Generic.List<Person>) =
   // does stuff returns a new list but for demo 
   // purposes I will just return list passed in
   list

作为旁注,我不会在流水线操作中使用.NET泛型List<T>,因为它是一个可变数据结构 - 因此您可能会遇到令人困惑的行为。不可变的F#列表或seq<T>是更好的选择。