반성이 아직 초기 단계였던 스칼라 2.10.0 이정표에, 내가 REPL에서 코드 스 니펫 트리를보기 위해 어떻게 사용할 수 있을지에 대한 I asked a question. 훌륭한 대답은 내가 물어 본 것보다 더 나아 갔고, 나무를 파싱하고 평가하는 데 어떻게 사용될 수 있는지를 보여 주었기 때문에 나는 오늘 진행 한 작은 프로젝트에서이를 사용하려고 노력했다. REPL 정의를보기 위해 Scala ToolBox를 얻으려면 어떻게해야합니까?
불행하게도, 코드 분석 및 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
이 REPL에서 만든 정의를 인식 얻을 수있는 방법이 있나요를?
REPL에 없습니까? 나는 sbt 프로젝트에서 똑같은 코드 (https://gist.github.com/jedesah/5812481)를 썼다. 그리고 나는 REPL과 같은 행동을한다. 이것이 툴박스가 다른 컨텍스트에서 작동하는 방법이라면, 나는 매우 알고 싶어한다. – jedesah
@UndercoverAgent 도구 상자의 코드는 "루트"에서 접근 할 수있는 모든 것에 액세스 할 수 있습니다. 그렇지 않으면 매우 쓸모가 없습니다. 표시 한 경우 해당 변수는 "루트"에서 사용할 수 없습니다. –
쓸데없는 말은 강한 단어입니다. 자체 포함 된 나무를 평가하는 데 사용할 수 있습니다. 어쨌든, 당신이 작업하고있는이 작은 프로젝트는 오픈 소스입니까? 외부 (트리 자체에서) 정의에 액세스하는 예를보고 싶습니다. "루트"에서 도달 한 의미를 정확히 알지 못합니다. – jedesah