¿Alguien puede explicar por qué no se compilará el segundo ejemplo a continuación?¿Por qué 'Código no es lo suficientemente genérico'?
'Test 2' da '' error FS0670: Este código no es suficientemente genérico. La variable de tipo^a no se puede generalizar porque escaparía a su alcance. ". No entiendo este mensaje de error.
// 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' [es de hecho' 'T -> string'] (http://msdn.microsoft.com/en-gb/library/ee340491.aspx), por lo que esto debería funcionar en teoría. Sin embargo, no tengo una mejor explicación para el error. –
Oh sí, acabo de pegar una cuerda ;; en F # interactivo para obtener el tipo. ¿Presumiblemente usar cadenas está forzando a la compilación a forzar un tipo en la entrada, y está eligiendo obj como el mínimo común denominador? – Massif