2015-02-05 80 views
1

爲什麼在F#中的數據參數,最後來了,像下面的代碼片段顯示:爲什麼數據參數最後

let startsWith lookFor (s:string) = s.StartsWith(lookFor) 
let str1 = 
    "hello" 
    |> startsWith "h" 
+7

[參數排序以支持currying](http://stackoverflow.com/questions/5863128/ordering-of-parameters-to-make-use-of-currying) – 2015-02-05 15:20:19

+1

這裏是一個F#特定的[文章]( http://fsharpforfunandprofit.com/posts/currying/) – 2015-02-05 15:41:48

回答

1

我想你的答案的一部分,是在你的問題。在調用函數之前,|>(向前管道)操作符允許您爲函數指定最後一個參數。如果參數是相反的順序,那麼這是行不通的。這個功能的最好例子是鏈接在列表上運行的函數。每個函數都將一個列表作爲其最後一個參數,並返回一個可以傳遞給下一個函數的列表。

http://www.tryfsharp.org/Learn/getting-started#chaining-functions

[0..100] 
|> List.filter (fun x -> x % 2 = 0) 
|> List.map (fun x -> x * 2) 
|> List.sum 

|>運營商允許你指定一個函數的最後一個參數 你打電話之前,重新安排你的代碼。這個例子是 在功能上等同於前面的代碼,但它更清晰地讀取更多 。首先,它創建一個數字列表。然後,它列出了數字 ,以過濾出賠率。接下來,它將結果傳遞給 List.map以將其加倍。最後,它將加倍的數字輸入到 List.sum以將它們加在一起。前進管道運營商重組功能鏈 ,以便您的代碼讀取您對問題的看法,而不是迫使您思考問題。

正如評論中提到的那樣,也有柯里化的概念,但我認爲這不像鏈接函數那樣容易掌握。

相關問題