`enumerateall` yields no elements; `collect` returns `#undef` entries

Abierto Apto para principiantes
#999 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
76/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Área
data

Línea de trabajo

Empieza en src/multi_dict.jl líneas 98-124, donde el iterador enumerateall define sus métodos iterate. Revisa el cortocircuito de ||/&& en el primer método iterate y luego haz que el método de dos argumentos avance el iterador interno vs en lugar de devolver vstate sin cambios. Terminado cuando collect(enumerateall(MultiDict(1 => 2, 1 => 3, 5 => 6))) devuelva los tres pares clave-valor y iterate ya no devuelva nothing en la primera llamada.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

enumerateall never yields an element, and collect returns a vector of #undef entries:

using DataStructures
md = MultiDict(1 => 2, 1 => 3, 5 => 6)
@show length(enumerateall(md)) iterate(enumerateall(md)) collect(enumerateall(md))

Output on master (b9ff234), Julia 1.13.3:

length(enumerateall(md)) = 3
iterate(enumerateall(md)) = nothing
collect(enumerateall(md)) = Any[#undef, #undef, #undef]

Cause, in src/multi_dict.jl:98-124:

  • dstate === nothing || vstate === nothing && return nothing parses as dstate === nothing || (vstate === nothing && return nothing). vs starts as an empty vector, so vstate is nothing and the first iterate returns nothing.
  • With the parentheses fixed, the two-argument method still returns vstate unchanged instead of calling iterate(vs, vst), so iteration would repeat the first value.

Related: #655.

Lenguaje dominante
Julia
Estrellas
747
Forks
261
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de JuliaCollections/DataStructures.jl

Todos los issues de JuliaCollections/DataStructures.jl

Issues similares

Más issues de Julia

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.