1
爲什麼在F#中的數據參數,最後來了,像下面的代碼片段顯示:爲什麼數據參數最後
let startsWith lookFor (s:string) = s.StartsWith(lookFor)
let str1 =
"hello"
|> startsWith "h"
爲什麼在F#中的數據參數,最後來了,像下面的代碼片段顯示:爲什麼數據參數最後
let startsWith lookFor (s:string) = s.StartsWith(lookFor)
let str1 =
"hello"
|> startsWith "h"
我想你的答案的一部分,是在你的問題。在調用函數之前,|>
(向前管道)操作符允許您爲函數指定最後一個參數。如果參數是相反的順序,那麼這是行不通的。這個功能的最好例子是鏈接在列表上運行的函數。每個函數都將一個列表作爲其最後一個參數,並返回一個可以傳遞給下一個函數的列表。
從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
以將它們加在一起。前進管道運營商重組功能鏈 ,以便您的代碼讀取您對問題的看法,而不是迫使您思考問題。
正如評論中提到的那樣,也有柯里化的概念,但我認爲這不像鏈接函數那樣容易掌握。
[參數排序以支持currying](http://stackoverflow.com/questions/5863128/ordering-of-parameters-to-make-use-of-currying) – 2015-02-05 15:20:19
這裏是一個F#特定的[文章]( http://fsharpforfunandprofit.com/posts/currying/) – 2015-02-05 15:41:48