过去两周我遇到了两次奇怪的问题,它开始让我感到沮丧。
我有这个非常简单的代码:
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'
有人可以告诉我这里发生了什么吗?
如果需要,我可以提供更多详细信息,但我不知道其他行如何相关。所有代码都在当前线程中执行。
感谢您的帮助!
答案 0 :(得分:4)
你不是要试图改变@current_step
(无论如何都不可能使用整数),你试图重新分配它。由于重新分配实例变量意味着改变实例变量所属的对象(即self
),所以只有在self
未被冻结时才能这样做。
换句话说:如果您更改调试消息以告知您self
是否被冻结而不是@current_step
,您会发现它是,这就是您收到错误的原因。