Выдать исключение при переприсвоении константы в Ruby?

Я долго знал, что "константы" в Ruby (т.е. имена переменной, которые использованы для своей выгоды) не являются действительно постоянными. Как другие языки программирования, ссылка на объект является единственной вещью, сохраненной в переменном/постоянном. (Боковая панель: Ruby действительно имеет средство, чтобы "заморозить" ссылочные объекты от того, чтобы быть измененным, которое насколько я знаю, не является способностью, предлагаемой на многих других языках.)

Таким образом, вот мой вопрос: когда Вы повторно присваиваете значение в константу, Вы получаете предупреждение как так:

>> FOO = 'bar'
=> "bar"
>> FOO = 'baz'
(irb):2: warning: already initialized constant FOO
=> "baz"

Существует ли способ вынудить Ruby выдать исключение вместо того, чтобы печатать предупреждение? Трудно выяснить, почему переназначения иногда происходят.

5
задан Benjamin Oakes 11 June 2010 в 15:17
поделиться

2 ответа

Посмотрите на Можете ли вы попросить Ruby обрабатывать предупреждения как ошибки? , чтобы увидеть, как в некоторых случаях можно рассматривать предупреждения как ошибки.

В противном случае, я полагаю, вам придется написать собственный метод для назначения констант и вызова исключения, если оно уже назначено.

Если вы знаете, что переназначение происходит с определенной константой, вы также можете добавить проверку работоспособности непосредственно перед назначением.

5
ответ дан 14 December 2019 в 01:02
поделиться

Вы не можете перехватить его напрямую, нет.

Если вам действительно это нужно, я могу подумать об очень грязном взломе. Вы можете перенаправить стандартную ошибку ввода-вывода на пользовательский объект ввода-вывода. Затем метод write может проверить, что пишется; если он содержит «предупреждение: уже инициализированная константа» , тогда вы вызываете, в противном случае вы перенаправляете вызов стандартной ошибке write .

3
ответ дан 14 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: