2 Stimmen

Unerklärliche "Objekt kann nicht geändert werden" Ausnahme

Ich bin in den letzten 2 Wochen zweimal auf ein seltsames Problem gestoßen und langsam regt es mich auf.

Ich habe diesen sehr einfachen Code :

  Rails.logger.debug "Ist current_step eingefroren  ? => #{@current_step.frozen?.inspect}"
  @current_step += 1

Wie Sie sich vorstellen können (oder auch nicht), wird dies in meiner Konsole angezeigt :

Ist current_step eingefroren  ? => false
Completed   in 264ms

TypeError (kann eingefrorenes Objekt nicht ändern):
  lib/chuguf/core.rb:44:in `upgrade'
  app/controllers/xml/cheat_controller.rb:6:in `index'

Kann mir jemand sagen, was hier passiert?

Ich kann weitere Details geben, wenn nötig, aber ich sehe nicht, wie andere Zeilen relevant sein könnten. Der gesamte Code wird im aktuellen Thread ausgeführt.

Vielen Dank für Ihre Hilfe!

4voto

sepp2k Punkte 352762

Sie versuchen nicht, @current_step zu mutieren (was ohnehin mit Ganzzahlen nicht möglich ist), sondern versuchen, es neu zuzuweisen. Da das Neuzuweisen einer Instanzvariable bedeutet, das Objekt zu mutieren, dem die Instanzvariable gehört (d. h. self), können Sie dies nur tun, wenn self nicht gefroren ist.

Anders ausgedrückt: Wenn Sie Ihre Debug-Nachricht ändern, um Ihnen mitzuteilen, ob self gefroren ist anstelle von @current_step, werden Sie feststellen, dass es so ist und deshalb den Fehler erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X