Wstecz, gdy odbicie jeszcze trwało, w dniach, w których pojawiły się kamienie milowe Scala 2.10.0, I asked a question, o tym, jak mogę go użyć, aby zobaczyć drzewa fragmentów kodu z REPL. Doskonała odpowiedź poszła dalej, niż się spytałem i pokazała, w jaki sposób można je wykorzystać do analizowania i oceniania drzew, więc poszedłem do przodu i starałem się użyć tego na małym projekcie, który miałem dzisiaj.Jak mogę uzyskać Scala ToolBox, aby zobaczyć definicje REPL?
Niestety, kod analizowany i oceniany w ten sposób wydaje się nie widzieć żadnej definicji rEPL:
scala> val x = 1
x: Int = 1
scala> import scala.tools.reflect.ToolBox
import scala.tools.reflect.ToolBox
scala> val tb = scala.reflect.runtime.universe.runtimeMirror(
getClass.getClassLoader).mkToolBox()
tb: scala.tools.reflect.ToolBox[reflect.runtime.universe.type] = ...
scala> tb.eval(tb.parse("x"))
scala.tools.reflect.ToolBoxError: reflective compilation has failed:
not found: value x
Czy istnieje sposób, aby zmusić go do uznania definicje dokonane na REPL?
W przeciwieństwie do nie w REPL? Napisałem dokładnie ten sam kod (https://gist.github.com/jedesah/5812481) w projekcie sbt i otrzymuję takie samo zachowanie jak w REPL. Jeśli tak działa ToolBox w innym kontekście, byłbym bardzo ciekawy. – jedesah
@UndercoverAgent Code w przyborniku ma dostęp do wszystkiego, co można uzyskać z "root" - w przeciwnym razie byłby zupełnie bezużyteczny. W przypadku, gdy pokazałeś, ta zmienna nie była dostępna w "root". –
Bezużyteczne jest trochę mocnym słowem, może być użyte do oceny drzew zawartych. W każdym razie, ten mały projekt, nad którym pracujesz, czy to jest open source? Chciałbym zobaczyć przykład dostępu do zewnętrznych (z samego drzewa) definicji, nie jestem pewien, co masz na myśli mówiąc, dotrzeć do nich z "root". – jedesah