2014-11-25 43 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

相關問題