过去两周我两次遇到奇怪的问题,它开始让我生气。
我有这个非常简单的代码:
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'
有人可以告诉我这里发生了什么吗?
如果需要,我可以提供更多详细信息,但我不知道其他行如何相关。所有代码都在当前线程中执行。
感谢您的帮助!
最佳答案
您并不是在尝试改变 @current_step
(无论如何,这对于整数来说是不可能的),而是在尝试重新分配它。由于重新分配实例变量意味着改变实例变量所属的对象(即 self
),因此只有在 self
未卡住的情况下才能执行此操作。
换句话说:如果您更改调试消息以告诉您 self
是否被卡住而不是 @current_step
,您会发现它是卡住的,这就是原因你收到错误。
关于ruby-on-rails - 无法解释的 "can' t修改卡住对象”异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3579290/