【问题标题】:Unexplainable "can't modify frozen object" exception无法解释的“无法修改冻结对象”异常
【发布时间】:2010-08-26 20:38:00
【问题描述】:

在过去的两周里,我遇到了两次奇怪的问题,这让我很生气。

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

  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'

谁能告诉我这里发生了什么?

如果需要,我可以提供更多详细信息,但我看不出其他行如何相关。所有代码都在当前线程中执行。

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby exception object


    【解决方案1】:

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

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

    【讨论】:

    • 好吧,你是对的 :D 现在的问题是,如何在不冻结的情况下将对象存储到缓存中? :p 谢谢!
    猜你喜欢
    • 2013-06-24
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2012-12-30
    • 2013-02-11
    • 1970-01-01
    相关资源
    最近更新 更多