Principales cambios en F# 3.0
Este tema describe cambios importantes en la versión 3.0 del compilador de F# y del lenguaje para la versión Visual Studio 2012.
Lista de cambios importantes
En la siguiente tabla se enumeran los cambios importantes ocurridos en F# 3.0.
Área de cambio importante |
Descripción |
---|---|
Sangría |
Si las las versiones anteriores del compilador de F# erroneamente aceptaban algunos sangrados incorrectos, en la versión actual dichos sangrados incorrectos producen error de compilación.Para obtener una descripción completa de las reglas de sangría, consulte Instrucciones de formato de código (F#). |
Comillas, métodos y propiedades de estructuras que son variables locales |
Ahora es un error llamar a una propiedad o a un método de una estructura entre comillas cuando esa estructura es una variable local.Las versiones anteriores de F# permitían este comportamiento.
Para evitar este requisito, cree una copia de la variable local, como se muestra en el siguiente ejemplo:
|
Igualdad para nulos inadecuados |
En versiones anteriores, se podían comparar valores nulos mediante el operador = independientemente de que fueran valores adecuados o inadecuados de un tipo.Un valor nulo adecuado es un valor nulo que permite el tipo; un valor nulo inadecuado no es un valor válido para el tipo.El comportamiento actual es producir una NullReferenceException cuando se intente usar el operador = para comparar nulos inadecuados, como muestra el siguiente código.
|
Comentarios y cadenas |
En versiones anteriores, una cadena de cierre de comentarios *) en una cadena con tres delimitadores (una cadena que utiliza """) se analizaba como una parte de una cadena.En la versión actual, dicho token se analiza como un carácter de cierre de comentario.Por consiguiente, el código siguiente, que se ha aceptado previamente, generará un error en la versión actual:
Para obtener más información, vea Cadenas (F#). |
Propiedades que tienen distintos tipos de getter y el setter. |
En versiones anteriores de F#, el compilador de F# permitía incorrectamente que los métodos getter y setter tuvieran tipos que no concordaran (por ejemplo, un getter de tipo int y un setter de tipo string).En F# 3.0, el compilador señala dicha declaración como un error. |