2010-12-28 6 views
1

Ich benutze JRebel mit Scala und ich bin ziemlich häufig erlebt die Notwendigkeit für den Neustart des Servers aufgrund der Tatsache, dass JRebel ist nicht in der Lage, eine Klasse zu laden, wenn die Oberklasse geändert wurde. Dies geschieht hauptsächlich, wenn ich anonyme Funktionen ändere, wie ich aus der JRebel- Fehlerbeschreibung ableiten kann:
Class 'mypackage.NewBook$$anonfun$2' superclass was changed from 'scala.runtime.AbstractFunction1' to 'scala.runtime.AbstractFunction2' and could not be reloaded.
Gibt es eine Möglichkeit, wie kann ich meinen Code entwerfen, um dies zu vermeiden? Nimmt Scala-Compiler die Funktionen, nummeriert sie aus einem, wie sie im Quellcode erscheinen?scala jrebel superclass ändern

Antwort

2

Die Zahlen, die sich ändern, beziehen sich auf die Anzahl der Funktionsargumente. Eine AbstractFunction1 ist eine Ein-Argument-Funktion, während AbstractFunction2 eine Zwei-Argument-Funktion ist. Eine Möglichkeit, dies zu umgehen, besteht darin, Ihre Funktionen zu curren oder zu tupeln, so dass sie immer Funktionen mit einem Argument darstellen.

Und, ja, anonyme Funktionen werden automatisch wie Sie vorgeschlagen benannt. Wenn Sie eine neue anonyme Zwei-Arg-Funktion vor einer vorhandenen anonymen Ein-Arg-Funktion einfügen, wird es aussehen, als ob sich der Typ der ursprünglichen Funktion geändert hat.

Verwandte Themen