Почему я могу изменить константы? - PullRequest
5 голосов
/ 17 января 2012
class TestClass
  CONSTANT = 1
end

TestClass::CONSTANT = 2

Видимо, вы можете изменить значение константы в Ruby в любое время. Почему их даже называют «константами», если вы можете их изменить?

Какова цель этих «констант»? Как способность изменять их значение облегчает программирование?

1 Ответ

6 голосов
/ 17 января 2012

Ну, константы в Ruby относительно переменны.Объекты, на которые они указывают, можно поменять местами (как в вашем примере), а также можно изменить их состояние.

class TestClass
  Constant = []
end
TestClass::Constant << "no warning at all!"

Единственное преимущество, которое они предоставляют, - это предупреждения, генерируемые при создании существующей постоянной точки для другого объекта.См. «Ruby программирования», раздел «Переменные и константы» .Он старый, но все еще действителен.

Цель существования констант в Ruby - сигнализация того, что данную ссылку не следует изменять.Например, если вы делаете Math::PI = 3.0, вы заслуживаете предупреждения.

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

В приведенном выше примере вы знаете, что Constant.is_a? Array, поэтому отправка символа << фактическому методу может быть выполнена только один раз.на первом исполнении этой строки.Проблема в том, что Ruby позволяет вам переопределить Array#<<, что делает проблему более сложной.

Проверка того, пытаются ли различные реализации Ruby использовать такую ​​оптимизацию, потребует дополнительных исследований и поиска в их документации или источниках.

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