2011-02-26 7 views

답변

11

scala.tools.nsc에서 주위를 둘러 보려고 했습니까?

당신이 필요로하는 것 (또는 적어도 좋은 출발점)과 같은 것이 있습니까?

scala> val interpreter = new tools.nsc.Interpreter 
interpreter: scala.tools.nsc.Interpreter = [email protected] 

scala> interpreter interpret "(3, 5)" 
res0: (Int, Int) = (3,5) 
res139: scala.tools.nsc.InterpreterResults.Result = Success 

scala> interpreter interpret "1 to 10 toList" 
res1: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 
res140: scala.tools.nsc.InterpreterResults.Result = Success 

[편집 : tools.nsc.Interpreter가 더 이상 사용되지 않는 것 같습니다. 이제는 tools.nsc.interpreter 패키지가 있습니다.]

+0

그게 완벽합니다 - 고마워요! – Bill

+0

'eval'도보십시오. 형식을 제공해야하지만식이 끝나는 형식을 반환하기 때문에 특히 유용합니다. –

1

Scala 컴파일러 API에 관심이있을 수 있습니다. 소스를 컴파일하고 실행해야 할 수도 있습니다. 이것은 스칼라 인터프리터에서 어떻게 수행되는지 AFAIK입니다.

이러한 문제를 기억

  • 이 느려질 수 있습니다.
  • 멀티 스레딩 응용 프로그램에서 병목 현상이 될 수 있습니다. AFAIK 클래스를로드하려면 JIT 등으로 인해 동기화가 필요합니다.
  • 안전하지 않을 수 있습니다. JVM 보안 제한 설정에 관심이있을 수 있습니다.

스칼라 컴파일러 (as in this thread)에 대한 정보가 있지만 오래된 될 수있다 : 당신은 자세한 정보가 필요하면, 당신은 아마 소스를 다운로드하고 scaladoc을 생성해야합니다.

나는 그것을 사용하려는 동기가 없지만 스칼라가 필요하지 않다면 JSR 223: Scripting for the Java™ Platform API에도 관심이있을 수 있습니다.

데이터 구조 만로드하려는 경우 다른 방법을 고려해야합니다. download from Maven 또는 directly download 수있는 JSON 라이브러리를 들어 올리십시오. 라이브러리를 사용하면 사례 클래스를 직렬화/비 직렬화 할 수 있습니다.

+0

고마워! 컴파일러 자체가 너무 무거울 수 있습니다. "[Foo (3, 3),"foo ", 4]"와 같은 것을 읽고 스칼라 데이터 구조를 되찾고 싶습니다. 컴파일러 API를 사용하지 않고이를 수행 할 수있는 방법이 있습니까? – Bill

+1

글쎄, 구조체 만 읽으려면 Lift JSON 역 직렬화를 사용하는 것이 어떻습니까? – v6ak

+2

그리고 json이 당신의 독약이 아니라면 * 정확하게 * 이렇게 작동하도록 설계된 scala의 파서 지원을 시도하십시오. –

관련 문제