es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo combinar iota y valores

En un enum de Go que contiene iota, ¿cómo es posible forzar algunos valores y, al mismo tiempo, incrementar automáticamente otros?

Por ejemplo, en este código fuente:

const (
    SUCCESS         int = iota
    ERROR_UNKNOWN       = 3
    ERROR_ARGS
    NOFILES             = 50
    ERROR_OPEN_FILE
    ERROR_BADFILENAME
)

ERROR_ARGS es igual a ERROR_UNKNOWN, cuando esperaba que fuera ERROR_UNKNOWN + 1.

¿Existe alguna manera de lograr una mezcla de incremento automático y valores “forzados”, sin usar el método del guion bajo (_), que resulta engorroso para rangos grandes como este (de 4 a 50, insertando 46 líneas de guiones bajos…)?

Aclarando después de la primera respuesta a continuación: Los valores siempre deben “avanzar”, incrementándose automáticamente incluso después de un valor forzado.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    En un enum de Go que contiene la constante iota, es posible forzar valores específicos mientras se autoincrementan otros estableciendo manualmente los valores de los enums forzados y dejando que el resto se autoincremente. Es importante destacar que al forzar valores, los valores siguientes continuarán autoincrementándose desde el último valor forzado. Por ejemplo:

    const (
        SUCCESS int = iota
        ERROR_UNKNOWN = 3
        ERROR_ARGS // será 4, ya que se autoincrementa desde el último valor forzado
        NOFILES = 50
        ERROR_OPEN_FILE // será 51, ya que se autoincrementa desde el último valor forzado
        ERROR_BADFILENAME // será 52, ya que se autoincrementa desde el último valor forzado
    )
    

    Alternativamente, puedes utilizar un enfoque híbrido utilizando _ para brechas grandes y estableciendo manualmente valores para brechas más pequeñas:

    const (
        SUCCESS int = iota
        ERROR_UNKNOWN = 3
        ERROR_ARGS = ERROR_UNKNOWN + 1 // establecer manualmente el valor
        _ // omitir valores del 5 al 49
        NOFILES = 50 // establecer manualmente el valor
        ERROR_OPEN_FILE // será 51, se autoincrementa desde el último valor forzado
        ERROR_BADFILENAME // será 52, se autoincrementa desde el último valor forzado
    )
    

    Es importante tener en cuenta que las constantes en Go no son verdaderos enums, y este enfoque se debe usar con precaución, ya que puede conducir a comportamientos inesperados.

Comments are closed.