flip
函數顛倒了雙參數函數的參數順序。舉一個簡單的subtract
功能:
subtract :: Int -> Int -> Int
subtract a b = a - b
subtract 4 3
-- 4 - 3 = 1
如果flip
被呼籲subtract
功能,它改變其數量被減去:
(flip subtract) 4 3
-- 3 - 4 = -1
它還具有不同參數類型的函數的工作原理:
showIntAndString :: Int -> String -> String
showIntAndString int string = (show int) <> string
showIntAndString 4 "asdf"
-- "4asdf"
(flip showIntAndString) "asdf" 4
-- "4asdf"
如果它對您更有意義,請嘗試將flip看作一個接受雙參數函數的函數作爲ar gument並返回另外兩個參數的函數的結果:
flip :: forall a b c.
(a -> b -> c) -- takes a function
-> (b -> a -> c) -- returns a function with flipped arguments
其中一個用例flip
是當你要部分地應用功能,但要部分應用參數是在第二位。然後您可以使用原始功能flip
,並部分應用所產生的功能。
謝謝你。似乎已清除。但是'showIntAndString int string =(show int)<> string'中的'(show int)'的含義是什麼? – Previn
不客氣。 'show'返回它的參數的字符串表示。很像其他語言的'toString()'。例如。 'show 123'等於'「123」'。有關PureScript中函數和類型的更多信息,請參見[Pursuit](https://pursuit.purescript.org)。 '這裏是文檔](https://pursuit.purescript.org/packages/purescript-prelude/3.1.0/docs/Data.Show#v:show)用於'show'。 – Houndolon