Есть ли разница в значении между 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
Я бы сказал, что разница - читаемость. Для одного параметра синтаксис '
не слишком запутан, но когда вы получаете список из них, становится легче читать версию угловой скобки.