Любая разница между t <'a> и' a t в F #?

Есть ли разница в значении между t<'a> и 'a t в F #? Могут ли они использоваться взаимозаменяемо даже после объявления?

Ответ 1

Нет никакой разницы, и да, они могут использоваться взаимозаменяемо даже после объявления.

Но обратите внимание на рекомендацию Рекомендация по разработке компонентов F # (раздел 4.2):

Рассмотрим использование префикса синтаксиса для генериков (Foo<T>) в предпочтении для синтаксиса постфикса (T Foo), с четырьмя примечательными исключениями (list, option, array, ref).

F # наследует и постфикс ML стиль именования общие типы, например. "int list", а также стиль префикса .NET, например. "list<int>". Вы должны предпочесть стиль .NET, за исключением четырех определенных типов. Для списков F # используйте постфиксную форму: "int list" а не "list<int>". Для параметров используйте форму постфикса: "int option" а не "option<int>". Для массивов используйте синтаксическое имя "int[]", а не "int array" или "array<int>". Для refs, используйте "int ref", а не "ref<int>" или "ref<int>". Для всех остальных типы, используйте форму префикса: "HashSet<int>", "Dictionary<string,int>", поскольку это соответствует стандартам .NET

Кроме того, вы получите предупреждение о компиляторе, если вы используете стандартную номенклатуру списка ML-стиля, например. ('a,'b) t против t<'a,'b>.

И пока мы на нем, обратите внимание на следующую рекомендацию в Раздел 3.1 того же руководства:

Использовать PascalCase для имен общих параметров в общедоступных API, в том числе для библиотек F #. В частности, используйте имена типа T, U, T1, T2 для произвольных общих параметров, а при создании конкретных имен смысл, то для библиотек F # -facing используются имена, такие как Key, Value, Arg (но не, например, TKey).

(хотя лично я склонен игнорировать эту рекомендацию для F # -обязания публичных библиотек).

Ответ 2

Никакой разницы вообще, не уверен, что это стоит целого ответа! Я предпочитаю первое, особенно когда речь идет о нескольких параметрах типа (возможно ли это с последним?).

Ответ 3

Я думаю, что синтаксис 'a t более идиоматичен (он используется почти во всех примерах MSDN и испускается компилятором, сгенерирует этот синтаксис для файлов подписи)

Существует аналогичный пример для массивов

int[] , int array

Синтаксис 'a t также приятнее для конкретных параметров -

int list, List<int>

поэтому некоторая согласованность доказывает для 'a t

Ответ 4

Я бы сказал, что разница - читаемость. Для одного параметра синтаксис ' не слишком запутан, но когда вы получаете список из них, становится легче читать версию угловой скобки.