Attualmente sto lavorando su un progetto usando Scala e Play Framework 2. Voglio compilare del codice Scala durante il runtime e ottenere il risultato dall'interprete. Ho trovato alcuni esempi su internet e, infine, si avvicinò con il seguente codice:scala.reflect.internal.FatalError: pacchetto scala non ha un membro Int
package controllers
import play.api.mvc.{Action, Controller}
import javax.script.ScriptEngineManager
class Interpreter extends Controller {
val interpreter = new ScriptEngineManager().getEngineByName("scala")
val settings = interpreter.asInstanceOf[scala.tools.nsc.interpreter.IMain].settings
settings.embeddedDefaults[Interpreter]
settings.usejavacp.value = true
def index = Action {
Ok(views.html.interpreter())
}
def interpret(input: String) = Action {
implicit request => interpreter.eval("1 to 10 foreach println")
Ok("Got: " + input)
}
}
object Interpreter
mio problema è che ottengo sempre un errore dal scala.reflect.internal.FatalError: "package scala does not have a member Int"
, quando si cerca di eseguire questo codice. Dopo alcune ricerche ho trovato problemi simili descritti in questo post:
Scala and Play 2.0 Plugins Update 0.38.437 is Out
Scala compiler error: package api does not have a member materializeWeakTypeTag
La mia attuale versione Scala è 2.11.4, così ho cercato di passare a un diverso "scala-compilatore" e versioni "scala-library" nel mio file "build.sbt", ma senza successo. Come è stato menzionato nei post precedenti, probabilmente è un bug in Scala. Mi chiedevo se qualcuno avesse una soluzione o forse qualche soluzione alternativa per il problema descritto.
Grazie in anticipo per qualsiasi aiuto o consiglio.
Non sono sicuro di ottenere esattamente ciò che si vuole fare, ma interpretare il metodo sul controller dovrebbe restituire un'azione che è fondamentalmente una funzione (play.api.mvc.Request => play.api.mvc.Result) . Nel tuo codice hai una richiesta implicita => Oggetto (proveniente dalla funzione eval) e poi restituisci il risultato Ok. È corretto? – Kris
1) per ottenere l'input: stringa da un campo di testo sul lato frontend 2) passare alla funzione interpret() 3) valutare l'input 4) e infine restituire l'output fornito dal compilatore . – dima
Sembra che questo problema riguardi solo le applicazioni specifiche. Lo stesso argomento su "scala script engine" di Google Gruppi https://groups.google.com/forum/#!topic/scala-script-engine/9YteLsdXPKU –