Como redefinir uma constante Ruby sem aviso?

Estou executando um código Ruby que avalia um arquivo Ruby toda vez que sua data muda. No arquivo, tenho definições constantes, como

Tau = 2 * Pi

e, é claro, eles fazem o intérprete exibir o aviso "constante já inicializada" indesejável toda vez; portanto, eu gostaria de ter as seguintes funções:

def_if_not_defined(:Tau, 2 * Pi)
redef_without_warning(:Tau, 2 * Pi)

Eu poderia evitar o aviso escrevendo todas as minhas definições constantes assim:

Tau = 2 * Pi unless defined?(Tau)

mas é deselegante e um pouco molhado (nãoSECO)

Existe uma maneira melhor dedef_if_not_defined? E comoredef_without_warning?

-

Solução graças a Steve:

class Object
  def def_if_not_defined(const, value)
    mod = self.is_a?(Module) ? self : self.class
    mod.const_set(const, value) unless mod.const_defined?(const)
  end

  def redef_without_warning(const, value)
    mod = self.is_a?(Module) ? self : self.class
    mod.send(:remove_const, const) if mod.const_defined?(const)
    mod.const_set(const, value)
  end
end

A = 1
redef_without_warning :A, 2
fail 'unit test' unless A == 2
module M
  B = 10
  redef_without_warning :B, 20
end
fail 'unit test' unless M::B == 20

-

Esta questão é antiga. O código acima é necessário apenas para o Ruby 1.8. No Ruby 1.9, a resposta do P3t3rU5 não produz nenhum aviso e é simplesmente melhor.

questionAnswers(4)

yourAnswerToTheQuestion