2009-06-04 12 views
1

hubfsのthisフォーラムの投稿に似たエラーが発生しました。問題は解決しましたが、そのスレッドのコードに関する質問が出ました。F#パラメータの制約のある機能

 
let test x = printfn "n" 
let finall x = x : 'a -> unit 
let i x = finall test x 

誰かが2行目で達成していることを説明できますか? 私はfinallのタイプは

finall: ('a -> unit) -> ('a -> unit)

機能に取り、その関数を返すので、そのわずかの関数であることがわかります。 2行目と3行目を実行する理由は何ですか? 後で機能の本体をfinallに定義できますか? 3行目のコールをかっこにする必要はないと思われます。これは2行目の結果ですか?

答えて

3

ええ、そのスレッドのコードはあまり意味がありません。 'finall'は、引数が任意の値ではなく関数を返す単位であることを除いて、基本的には恒等関数(id x = xとする)です。基本的に、それはあなたが同じように簡単に、私はこのスニペットは、おそらく彼らが理解していなかったエラーメッセージを表示して開始した人から来て、それをダウンストリップしようとしたことを期待し

let test x = printfn "n" 
let i x = test x 

書くことができ、何も有効ではありません小さなサンプルの複製。

(関数呼び出しについて、あなたはF#で聞かせて結合する関数を呼び出して、括弧を必要としません:

f x 

をコールであり、機能のアプリケーションが

を意味し、カリー化をサポートするために、通常の方法で動作します
f x y 

は 'finallテストx' は、LINに何が起こっているかである

(f x) y 

を意味し、 e。)

+0

ありがとう、それは私が探していたものです! – Jake

関連する問題