2014-11-25 60 views
0

我想执行功能流水线,但我不能让它工作的多个函数参数,其中一个参数是通用列表。功能流水线与多个参数,其中一个参数是一个通用的列表

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 

编译器与“抱怨预期的表达,具有输入“a * INT但这里有类型int“

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

回答

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>是更好的选择。

+0

感谢您的帮助Tomas,也改为使用seq 代替 – bstack 2014-11-25 14:01:22

相关问题