2013-06-20 3 views

ответ

4

В этом случае 'T и 'U - произвольные типы.

В других случаях ограничения могут быть установлены на 't с использованием ограничений.

Иногда имена могут быть описаны как 'key или 'value. В F # ключ состоит в том, что ' перед типом делает его общим.

Аналогично, типы могут иметь префикс #, который позволяет использовать любой тип, который может быть повышен до данного типа.

Более сложные ограничения типов с использованием встроенных методов могут использоваться с ^ перед именем типа, допускающим ограничения для членов, которые невозможны с использованием системы типа .Net и будут работать только с встроенными функциями F #.

+0

Извините, я просто пропустил ваше сообщение, Джон. В этом случае в чем разница между «T» и «U»? И почему бы не использовать 'a? – misaochan

+1

'' T' и '' U' (не обязательно) разные типы. Выбор использовать 't' вместо' 'a' произволен. –

+2

Вы имеете в виду, что «T может быть любым родовым типом», U может быть любым родовым типом, и мы просто используем «T» и «U» для обозначения любых двух потенциальных разных типов? – misaochan

2

Из спецификации:

Тип формы «является идент тип переменной. Например, следующие все типы переменных:

'a 
'T 
'Key 

И ваш вопрос о том, почему 'T и не 'a:

Примечание: данная спецификация обычно использует прописные идентификаторы, такие как «T или» Key для пользовательских параметров типового типа, и использует строчные идентификаторы, такие как 'a или' b для параметров, генерируемых компилятором .

http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html

В этом случае, все это означает, List.map : ('T -> 'U) -> 'T list -> 'U list принимает в функции, которая преобразует 'T значение типа для 'U типа, список «значений Т типа и возвращает список„типа“U» ценности - это, конечно, то, что делает карта.

+0

Спасибо! Очень полезно. – misaochan

Смежные вопросы