update programacion lenguaje language julialang downloads docs books julia-lang

julia lang - programacion - `where` en definiciones de funciones en julia-0.6



julia lenguaje de programacion (1)

La nueva sintaxis significa lo mismo, pero se puede usar en más circunstancias y puede expresar más construcciones y elimina una serie de ambigüedades conceptuales, especialmente los constructores paramétricos circundantes. La sintaxis antigua quedará obsoleta en 0.6 y parte de la sintaxis antigua se reclamará con un significado diferente en 1.0. Fundamentalmente, el problema con F{T}(args...) es que la parte F{T} es conceptualmente ambigua: el analizador sabe lo que significa, pero a menudo es confuso para los humanos:

  • En aislamiento F{T} significa el tipo paramétrico F con el tipo de parámetro T

  • Seguido de parens, no como parte de una definición de método, F{T}(args...) significa aplicar el tipo F{T} a los argumentos args... como una función, generalmente construyendo una instancia del tipo F{T} .

  • Seguido de parens y equals, es decir, como parte de una definición de método como en F{T}(args...) = expr , significa definir un método para F como una función, con parámetros de tipo T argumentos formales args... y definición expr .

En particular, no hay sintaxis para ninguno de estos:

  • Agregar un método a F{T} para el valor concreto de T en el alcance actual.

  • Añadiendo un método a F{T} para cada valor paramétrico T

Esta situación provoca la sintaxis del constructor en Julia 0.5 y antes de ser más confusa e intuitiva de lo necesario. En Julia 1.0, los parámetros y constructores de tipo serán más intuitivos y consistentes, siguiendo estos principios:

  • La sintaxis utilizada para definir un método siempre coincide con la sintaxis utilizada para llamarlo.
  • La sintaxis de F{T} siempre se refiere al tipo F con el parámetro T
  • Los parámetros de tipo siempre se introducen por las cláusulas where .

Habrá una explicación más detallada de los cambios cuando se publique 0.6, probablemente en una publicación del blog sobre los aspectos más destacados de la versión 0.6.

Estoy tratando de entender el nuevo sistema de tipos en Julia v0.6, basado en la lectura de las notas de la versión .

¿Alguien puede decirme qué?

inv(M::Matrix{T}) where T <: AbstractFloat

Me da lo que es diferente de usar el clásico.

inv{T<:AbstractFloat}(M::Matrix{T})

?