Необъяснимое исключение «невозможно изменить замороженный объект» - PullRequest
2 голосов
/ 27 августа 2010

За последние 2 недели я дважды сталкивался со странной проблемой, и это начинает меня бесить.

У меня есть очень простой код:

  Rails.logger.debug "Is current_step frozen  ? => #{@current_step.frozen?.inspect}"
  @current_step += 1

Можете ли вы (или нет) представить, это то, что отображается на моей консоли:

Is current_step frozen  ? => false
Completed   in 264ms

TypeError (can't modify frozen object):
  lib/chuguf/core.rb:44:in `upgrade'
  app/controllers/xml/cheat_controller.rb:6:in `index'

Может кто-нибудь сказать мне, что здесь происходит?

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

Спасибо за вашу помощь!

1 Ответ

4 голосов
/ 27 августа 2010

Вы не пытаетесь изменить @current_step (что в любом случае невозможно с целыми числами), вы пытаетесь переназначить его. Поскольку переназначение переменной экземпляра означает изменение объекта, к которому принадлежит переменная экземпляра (т. Е. self), вы можете сделать это, только если self не заморожено.

Другими словами: если вы измените свое сообщение отладки, чтобы сообщить, заморожено ли self вместо @current_step, вы обнаружите, что это так, и именно поэтому вы получите ошибку.

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