Не совсем.Он работает с использованием REPL, который всегда компилируется для оценки кода в 2.12 и более ранних версиях.
Возможно, вы пытаетесь:
$ scala
Welcome to Scala 2.12.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_144).
Type in expressions for evaluation. Or try :help.
scala> val s = scala.tools.nsc.interpreter.Scripted()
s: scala.tools.nsc.interpreter.Scripted = scala.tools.nsc.interpreter.Scripted@432f4626
scala> s.eval("class C")
res0: Object = null
scala> val c = s.compile("new C")
c: javax.script.CompiledScript = scala.tools.nsc.interpreter.Scripted$WrappedRequest@13346a64
scala> c.eval()
res1: Object = C@2d093067
scala> c.eval()
res2: Object = C@2693e39c
Вы можете наблюдать за работой компиляции:
scala> s.intp.settings.Xprint.value_=(List("typer"))
На втором eval он повторно использует класс, который упаковывает код пользователя, но компилирует новую оболочку, которая пересылает определения.Похоже, есть ошибка, при которой он пытается пересылать как определения значений, так и типы;в этом случае определение класса не работает.
Возможно, вы не намерены определять два разных класса, а возвращаете два экземпляра одного и того же класса, как показано?