Просто поместите вашу константу в модуль, а затем используйте Module#freeze
, чтобы запретить дальнейшую модификацию модуля.
Например,
module Really
CONSTANT = :foo
freeze
end
Really::CONSTANT = :bar
-> RuntimeError: can't modify frozen Module
Обратите внимание, что это не говорит об изменчивостизначения, присвоенного константе.Для этого используйте Object#freeze
.
. Этот подход сильно укусит вас в среде, где ваш код перезагружается, как в приложении Rails.Там вам придется перепрыгнуть через дополнительный обруч, проверяя, был ли модуль определен еще до его определения.
Как правило, защитное программирование в Ruby - это больше проблем, чем оно того стоит.Что тебя беспокоит?