×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
funattii's small small diary
package scalaonscala
import scala.tools.nsc._
import scala.util.DynamicVariable
import org.jruby.Ruby
class Evaluator {
val settings = new GenericRunnerSettings(println _)
val i = new Interpreter(settings)
{
val origBootclasspath = settings.bootclasspath.value
val compilerPath = jarPathOfClass("scala.tools.nsc.Interpreter")
val libPath = jarPathOfClass("scala.ScalaObject")
val pathList = List(compilerPath,libPath)
settings.bootclasspath.value = (origBootclasspath :: pathList).mkString(java.io.File.separator)
}
def eval(line: String): Any = {
i.interpret(line)
Evaluator.result.value
}
def jarPathOfClass(className: String) = {
val resource = className.split('.').mkString("/", "/", ".class")
val path = getClass.getResource(resource).getPath
val indexOfFile = path.indexOf("file:")
val indexOfSeparator = path.lastIndexOf('!')
path.substring(indexOfFile, indexOfSeparator)
}
}
object Evaluator {
val result = new DynamicVariable[Any](())
}
object EvalTest {
def main(args: Array[String]): Unit = {
val e = new Evaluator
println("Hello, Scala!")
var r = e.eval("println(\"Hello, Scala on Scala!\")")
println(r)
r = e.eval("println(\"Hello, Scala on Scala!!!!\")")
println(r)
val runtime = Ruby.getDefaultInstance();
runtime.evalScriptlet("puts \"Hello, Ruby on Scala!\"");
runtime.evalScriptlet("puts \"Hello, Ruby on Scala!!!!!\"");
}
}
object Hoge {
def somefunc = "mogemoge"
}