正常に機能するコードは次のとおりです。
let f x y z = x + y + z
let g x y = f x y
let h x z = z |> f x
したがって、式「h 1」を記述でき、FSIは次のように表示します。
val it : (int -> int -> int) = <fun:it@110-3>
「h123」と呼ぶと、引数は正しい順序で適用されます。
しかし、最後の引数のタイプが異なる場合、状況は異なります。
let ff x y (z : string) = x + y
let gg x y = ff x y
let hh x (z : string) = z |> ff x
ここで、最後の関数hhによりエラーメッセージが表示されます。
Script.fsx(119,10):エラーFS0001:タイプの不一致。期待している
string -> 'a
が与えられたint -> string -> int
。タイプがタイプstring
と一致しませんint
これが発生する理由を理解しています。「z」が「ffx」に追加され、2番目の引数になります。しかし、最初の例では、式「h 1 2 3」が正しく機能しない(「f 1 3 2」として実行される)と予想します。しかし、それはうまく機能します。