2016-06-02 3 views
4

Я видел функцию, определенную следующим образом:Что означает символ # в сигнатуре функции f #?

let private applyTarget (logger:#ILogger) ceiling target = 
    logger.Debug "enforce ceiling" 
    match target > ceiling with 
    | true -> ceiling | false -> target 

Что делает # символ означает в подписи?

В чем разница между logger:ILogger и logger:#ILogger?

+1

Я считаю, что это [аннотация для гибкого типа] (https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/flexible-types-%5bfsharp%5d). Я подозреваю, что, поскольку повышение в F # не всегда подразумевается, имеет смысл не форсировать его на вызывающих, используя гибкий тип. –

ответ

7

Подпись типа #t называется «гибкий тип», и это всего лишь короткая рука для 'a when 'a :> t.

То, что #t означает "любой подвид t".

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