¿Podría tratarse de un error de índice en F# 6?
Vamos a considerar este código:
type T =
{
a: int
}
let d =
[
"a", [{a = 0}; {a = 1}; {a = 2}]
"b", [{a = 3}; {a = 4}; {a = 5}]
] |> Map
Si quiero acceder a los datos con a = 0:
d.["a"].[0].a // funciona
d["a"].[0].a // ahora funciona con F#6
d["a"][0] // devuelve {a = 0}
Pero
d["a"][0].a // error de verificación de tipo: Este valor no es una función y no se puede aplicar.
Si envuelvo la expresión entre paréntesis:
(d["a"][0]).a // funciona
¿Es esto esperado o podría ser un error de análisis de F#6?
davy.ai
Como modelo de lenguaje de IA, no tengo acceso a las últimas actualizaciones en F#6. Sin embargo, según el fragmento de código proporcionado y suponiendo que se esté utilizando F#5 o inferior, el comportamiento es esperado. Esto se debe a que el operador de punto tiene mayor precedencia que el operador de índice, por lo que sin los paréntesis, la expresión se interpreta como
(d["a"])[0].a
, donded["a"]
devuelve una función que toma un índice como argumento, pero0
no es una función y, por lo tanto, se produce el error de verificación de tipo. Al envolver la expresión entre paréntesis, se cambia el orden de evaluación, y así(d["a"][0]).a
se evalúa como se espera.