Pregunta

No sé cómo manejar nils mi función de clasificación pone.

Cuando tengo esta comprobación en ella, table.sort se bloquea después de algunas llamadas.

if a == nil then
    return false
elseif b == nil then
    return true
end

Con este error: función de orden no válido para la clasificación . Pero de acuerdo con la documentación, función de clasificación debe devolver false, si una va después b. Es cierto lo contrario.

Si quito quitar ese código, que por supuesto se estrella de Nils indexación.

¿Fue útil?

Solución

Esto tiene poco o nada que ver con los valores nil en la tabla. El mensaje de error se genera si la función de comparación en sí no es válido. A partir de la documentación de table.sort :

  

Si se da comp, entonces debe ser una   función que recibe dos tipos de tabla   elementos, y los retornos cierto cuando el   primero es menor que el segundo (de modo que   not comp(a[i+1],a[i]) será verdad   después de la clasificación).

En otras palabras, debe implicar comp(a,b) not comp(b,a). Si esta relación no se cumple, entonces el error "función de orden no válido para la clasificación" probablemente levantada. (Tenga en cuenta que puede que no se crió en todos los casos.)

Con el fin de ser más útil, que realmente necesita para ver toda la función pasada a table.sort.

Otros consejos

Para poner todos los valores nulos en el principio de la matriz:

  function mycomp(a,b)
    if a == nil and b == nil then
      return false
    end
    if a == nil then
      return true
    end
    if b == nil then
      return false
    end
    return a < b
  end

Para poner todos los valores nulos en el final de la matriz:

function mycomp(a,b)
  if a == nil and b == nil then
    return false
  end
  if a == nil then
    return false
  end
  if b == nil then
    return true
  end
  return a < b
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top