2016-08-08 5 views
5

現在、私は無料のオンラインリソースでF#を学習しています。私は興味があり、小さな教科書に学んだことを適用しようとしているので、MSDN F#のドキュメントを頻繁に調べています。F#ドキュメントの関数シグニチャの理解

しかし、ドキュメントは私には本当にわかりにくいようです。例えばpown関数の場合はdocumentation pageとします。使用方法は、前方かなりストレートですが、私は、関数のシグネチャを理解していない:

// Signature: 
pown : ^T -> int -> ^T (requires ^T with static member One and ^T with static member op_Multiply and ^T with static member (/)) 

誰かが次のものが約何であるか、私には説明できますか?

  1. Tの前にある^(サーキュムフレックス)とは何ですか?
  2. 「T」とは何ですか?それは一般的なタイプですか?
  3. double - >は何をしますか?
  4. requireステートメントは何をしますか?

これは1つの回答ではあまりカバーしないことを願っています。

答えて

8
  1. これはT(4以下も参照)、通常のジェネリック型パラメータとは対照的にstatically resolved type parameterであることを示しています。
  2. はい。
  3. ->は、関数の型コンストラクタであり、右結合であるため、この部分は​​に相当します。言い換えると、タイプ^Tの引数をこの関数に渡すと、intから^Tに関数が返されます。したがって、pown 2は、電力がまだ流れていない2 xの関数です。 pown 2 8(pown 2) 8と同じです:2 です。
  4. 呼び出しの時点で、^Tの代わりにどのような具体的な型であっても、これらの要件を満たすためには静的に認識されていなければなりません。したがってpown 2 8に電話することができます(intはこれらの操作をサポートします)。pown "test" 8stringには該当しないため)はサポートされていません。
+0

リンクありがとうございました。 –

6

ここではいくつかのことが起こりますので、まずはF#で署名に近づくことをお勧めします。まず、サークルフレックスを無視してください。ダニを精神的に代用してください。それで、あなたは "必須"の部分を無視することができます。短いストーリーは、サーカフレックスのためにそこにあります。 - 大文字'Tは、.NETの標準は、F#は通常小文字'a使用され、'bなど何この署名は説明があり

// Signature: 
pown : 'T -> int -> 'T 

'Tがジェネリック型である:

だからそのあとは、このような署名を持っています関数は'Tintをとり、'Tを返します。最後の->の後の型は、関数の "戻り値の型"です。少なくとも、これは初めに考えておくと便利です。

実際には、F#関数はカリーされています(デフォルトでは部分的に適用されます)ので、実際には'Tを受け取り、その時点で関数int -> 'Tを返しますなぜあなたは二重になったのかはっきりしています->

サーカフレックスのものは静的に解決されたタイプです - @kvbはそれについてもっと詳しく説明しています。それが存在することを知っているのは良いことですが、実際にはめったに使用されないものです(コアの数値関数や演算子でも見られます)。

+1

複数の矢印は、機能がカレーされていることを知っているときには、もっと意味を成してくれます。ありがとうございます! –