ruby - method - soluciones al molesto mensaje de "advertencia: constante ya inicializada"
ruby method (4)
Encontré este mismo problema hoy y encontré una solución simple.
Dado que la advertencia es de intentar reasignar una constante con su mismo valor, acabo de cambiar
module LifeCycle
RESET = ''reset''
end
a
module LifeCycle
RESET ||= ''reset''
end
Esto se encargó de la advertencia y es mucho más simple que verificar si se define cada constante. Avíseme si encuentra una mejor solución.
Hoy he tropezado con un problema complicado con las constantes de Ruby. En nuestro equipo, alguien creó un módulo, que se incluye en múltiples modelos. En nuestro resultado de prueba (especificada) esto da como resultado mensajes de advertencia como:
/home/ayrton/project/lib/life_cycle.rb:5: advertencia: reinicio ya constante constante
Una forma de resolver esto es declarando sus constantes así:
module LifeCycle
unless (const_defined?(:RESET))
RESET = ''reset''
end
#...
end
También leí una publicación de blog, escrita por Avdi Grimm, que proporciona una solution alternativa, me preguntaba cuáles son sus opiniones con respecto a este asunto.
Este es solo un problema en las aplicaciones que se vuelven a cargar explícitamente, como las aplicaciones de Rails.
Si la verbosidad te ofende, puedes usarla a unless
que unless
un modificador de enunciado:
module LifeCycle
RESET = ''reset'' unless const_defined?(:RESET)
end
Esto deja algunos argumentos débiles en contra de la sugerencia de Avdi de usar solo métodos:
- la búsqueda constante es más rápida que la búsqueda de métodos,
- los valores constantes se definen en la carga, no en la (primera) solicitud,
- las constantes sugieren visualmente que no requieren trabajo para derivar, y
Si le gusta la sugerencia de Avdi lo suficiente como para ignorar estos, acéptelos.
RESET no es una constante si cambia constantemente en su código. Si cambia el nombre a ''restablecer'' minúsculas, el problema desaparece. Ruby piensa que las variables mayúsculas son constantes y, por lo tanto, muestra un error para advertirle que una constante ha cambiado.
Recibí este error en Ruby cuando Intellij IDE ... Eso se debió a que el nombre de la variable se declaró comenzando con mayúsculas ... lo que a minúsculas resolverá este problema ...