12

t<'a>'a tF#の意味に違いはありますか? 宣言後でも互換的に使用できますか?

4

4 に答える 4

14

違いはありません。はい、宣言後でも同じ意味で使用できます。

ただし、F# コンポーネント デザイン ガイドラインの推奨事項 (セクション 4.2)に注意してください。

4 つの注目すべき例外 ( 、 、 )を除いて、後置構文 ( ) よりもジェネリック ( Foo<T>)の前置構文を使用することを検討してください。 T Foolistoptionarrayref

F# は、"<code>int list" などのジェネリック型の命名の後置 ML スタイルと、"<code>list<int>" などのプレフィックス .NET スタイルの両方を継承します。4 つの特定の型を除いて、.NET スタイルを優先する必要があります。F# リストの場合、「<code>list<int>」ではなく「<code>int list」という後置形式を使用します。オプションには、「<code>option<int>」ではなく「<code>int option」という後置形式を使用します。配列の場合、「<code>int array」または「<code>array<int>」ではなく、構文名「<code>int[]」を使用します。の場合refs、「<code>ref<int>」または「<code>Ref<int>」ではなく「<code>int ref」を使用します。他のすべてのタイプについては、プレフィックス形式を使用します: “<code>HashSet<int>”, “<code>Dictionary<string,int>”,

また、ML スタイルのジェネリック パラメーター リスト表記 ( ('a,'b) tvs.など) を使用すると、コンパイラの警告が表示されますt<'a,'b>

また、同じガイドのセクション 3.1にある次の推奨事項に注意してください。

F# 向けのライブラリを含め、パブリック API の汎用パラメーター名には PascalCase を使用してください。特に、任意のジェネリック パラメータには T、U、T1、T2 などの名前を使用し、特定の名前が意味をなす場合は、F# 向けのライブラリには Key、Value、Arg などの名前を使用します (TKey などは使用しません)。

(個人的には、F# 向けのパブリック ライブラリに対するこの推奨事項を無視する傾向があります)。

于 2012-04-16T01:33:57.663 に答える
3

まったく違いはありません。これが完全な回答に値するかどうかはわかりません! 複数の型パラメータに関しては、特に前者を好みます(後者でそれは可能ですか?)。

于 2012-04-16T00:22:36.070 に答える
2

構文はより慣用的だと思い'a tます (ほとんどすべての MSDN の例で使用され、コンパイラによって出力され、署名ファイルの構文が生成されます)。

配列にも同様の例があります

int[] , int array

'a t構文は、具体的なパラメーターの場合にも優れています-

int list, List<int>

したがって、いくつかの一貫性が主張します'a t

于 2012-04-16T00:47:21.137 に答える
1

違いは読みやすさだと思います。1 つのパラメーターについては、'構文がそれほど混乱することはありませんが、それらのリストを取得すると、山かっこバージョンの方がはるかに読みやすくなります。

于 2012-04-16T00:36:45.023 に答える