ruby-on-rails - 无法解释的 "can' t修改卡住对象”异常

标签 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'

有人可以告诉我这里发生了什么吗?

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

感谢您的帮助!

最佳答案

您并不是在尝试改变 @current_step (无论如何,这对于整数来说是不可能的),而是在尝试重新分配它。由于重新分配实例变量意味着改变实例变量所属的对象(即 self),因此只有在 self 未卡住的情况下才能执行此操作。

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

关于ruby-on-rails - 无法解释的 "can' t修改卡住对象”异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3579290/

相关文章:

ruby-on-rails - sort_by 与子查询花费太长时间

ruby - 是否存在 ruby "exception"会通过 'rescue Object' 的情况?

java - 使用重新抛出已检查/未检查的异常?

python - PostgreSQL pgdb 驱动程序引发 "can' t 回滚“异常

javascript - 如何正确转义 Rails 部分中的 javascript 标签?

ruby-on-rails - Twitter::Error::ServiceUnavailable(容量过大)

ruby-on-rails - 来自 group(..).sum(..) 的 Rails 排序结果

ios - 如何避免 "Terminating app due to uncaught exception"

javascript - 语法错误: illegal character when posting array to data attribute of highcharts

ruby-on-rails - 如何调试内存泄漏并在使用 Rails 4.2.1 + Nginx + Passenger 构建的应用程序中进行线程分析?