2010-01-07 2 views

ответ

9

Это делает, но вы должны аннотировать следующим образом:

type Thing<'a when 'a:comparison> = 
    | Pair of ('a*'a) 
    with 
     member m.InOrder() = 
     match m with 
     | Pair (a,b) when a<=b -> true 
     | _ -> false 
     member m.Equal() = 
     match m with 
     | Pair (a,b) when a=b -> true 
     | _ -> false 

Pair(1,2).InOrder() //true 
Pair(3,2).InOrder() //false 
Pair(42,42).Equal() //true 

Попробуйте заменить Thing<'a when 'a:comparison> на Thing<'a when 'a:equality> смотреть метод InOrder() неудачу, в то время как Equal() все еще работает. Замените Thing<'a when 'a:comparison> на Thing<'a>, и оба метода не будут работать.

3

Да, он поддерживает дженерики - посмотрите на this в качестве примера.

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