2014-10-09 3 views
1

예측할 수없는 데이터 구조를받을 도구를 만들고 있는데,받은 데이터의 구조를 완성하기 위해 사례 클래스를 생성하려고합니다. 런타임에 사례 클래스를 생성 할 수 있는지 파악하려고합니까? 이 구조는 런타임에만 알 수 있습니다. 매크로와 비슷하지만 런타임에는 비슷합니다. 나는이 프로젝트를 인터넷에서 발견했다. mars 내가하고 싶은 일에 매우 가깝지만, 성공하지 못했다.스칼라 런타임에 메타 프로그래밍

IScala가 반복적으로 코드를 사용하는 것처럼 코드를 생성하고 컴파일하여 결과를 클래스 경로에 저장하는 또 다른 방법이 있습니다. 그러나 나는 이것이 확장 될 것이라고 생각하지 않는다.

누구든지 이미 런타임 코드 생성과 같은 작업을 수행 했습니까?

이 질문은 scala-user 메일 링리스트에 게시했습니다

답변

2

UPDATE : 당신이 원하는 모든 런타임에 생성 된 일회용 코드는 라이브러리에 공급 될 경우

(의견에 따라) 목록과 맵에서만 작동하며 나중에 저장하고 사용할 코드가 아니라면 Java 또는 JVM에서이 문제에 대한 솔루션을 찾는 것이 좋습니다. 즉, 라이브러리가 바닐라 JVM 바이트 코드에서 사용할 수없는 스칼라 특정 기능을 필요로하지 않는 한 (스칼라는 자바 코드가 필요하지 않은/바이트 코드에 몇 가지 추가 기능을 추가합니다).


정적으로 입력 된 코드를 동적으로 생성 할 때의 이점은 무엇입니까? 동적 데이터 구조를 사용하는 것과는 대조적입니다.

전혀 시도하지 않겠습니다. 중첩 된 목록 및 맵과 같은 구조 만 사용하면됩니다.

+0

라이브러리에서이 데이터의 인스턴스를 사용해야하므로 사례 클래스를 만들어야합니다. – dirceusemighini

+1

생성하고 저장 하시겠습니까? 아니면 그냥 생성, 사용 및 던져? 후자의 경우 정적 코드에서 생성 된 클래스를 어떻게 사용 하시겠습니까? 라이브러리가 리플렉션을 사용하고 예를 들어 목록과지도? –

+0

그것은 쓸모 없어 질 것이고, 우리는 그것을 저장하지 않을 것입니다. 현재 그들은 리플렉션을 사용하고 목록에서 작동 할 수 없습니다. 이 클래스는 쿼리와 계산에 사용될 스키마를 생성하는 데 사용됩니다. – dirceusemighini

1

런타임 코드 생성은 the Mars Project의 목적 중 하나입니다. 화성은 개발 중이며, 현재 출시 버전이 없습니다. Mars는 런타임시 매크로를 확장하는 데 자체 도구 체인이 필요하며 scala.meta (http://scalameta.org/)에 고유 한 여러 기능 (예 : AST 해석 및 AST 지속성)을 사용해야합니다. 현재 우리는 런타임 매크로 확장에 필요한 스칼라 반영 형식 검사 (AST typechecking) 작업을하고 있습니다.