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