无法解释的“无法修改冻结对象”异常

时间:2010-08-26 20:38:01

标签: ruby-on-rails ruby exception object

过去两周我遇到了两次奇怪的问题,它开始让我感到沮丧。

我有这个非常简单的代码:

  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 个答案:

答案 0 :(得分:4)

你不是要试图改变@current_step(无论如何都不可能使用整数),你试图重新分配它。由于重新分配实例变量意味着改变实例变量所属的对象(即self),所以只有在self未被冻结时才能这样做。

换句话说:如果您更改调试消息以告知您self是否被冻结而不是@current_step,您会发现它是,这就是您收到错误的原因。