Qualcuno può spiegare perché il secondo esempio di seguito non verrà compilato?Perché il codice non è sufficientemente generico?
'Test 2' restituisce "errore FS0670: questo codice non è sufficientemente generico. La variabile di tipo^a non può essere generalizzata perché ne uscirebbe l'ambito.". Non riesco a capire questo messaggio di errore.
// Test 1
type test1<'a> = | A of 'a
with
override t.ToString() =
match t with
| A a -> a.ToString()
// Test 2
type test2<'a> = | A of 'a
with
override t.ToString() =
match t with
| A a -> string a
// Test 3
type test3<'a> = | A of 'a
with
override t.ToString() =
match t with
| A a -> string (a :> obj)
'string' [è in effetti' 'T -> string'] (http://msdn.microsoft.com/en-gb/library/ee340491.aspx), quindi questo dovrebbe funzionare in teoria. Non ho una spiegazione migliore per l'errore però. –
Oh sì, ho appena messo uno spago ;; in F # interattivo per ottenere il tipo. Presumibilmente l'uso della stringa sta forzando la compilazione a forzare un tipo sull'input e sta scegliendo obj come il minimo comune denominatore? – Massif