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étricoF
con el tipo de parámetroT
Seguido de parens, no como parte de una definición de método,
F{T}(args...)
significa aplicar el tipoF{T}
a los argumentosargs...
como una función, generalmente construyendo una instancia del tipoF{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 paraF
como una función, con parámetros de tipoT
argumentos formalesargs...
y definiciónexpr
.
En particular, no hay sintaxis para ninguno de estos:
Agregar un método a
F{T}
para el valor concreto deT
en el alcance actual.Añadiendo un método a
F{T}
para cada valor paramétricoT
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 tipoF
con el parámetroT
- 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.