매크로로 케이스 클래스를 "동적으로"생성

사용자 833970

봉인 된 추상 및 케이스 클래스의 매크로 생성 계층을 만들고 싶습니다. http://docs.scala-lang.org/overviews/macros/typemacros.html에 이와 유사한 예제 가 있었지만 이제는 더 이상 사용되지 않습니다. 여전히 가능합니까?

특정 문법에 대해 형식 안전 AST를 생성하는 것이 엄청나게 강력하다고 생각합니다. 이상적으로는 모든 클래스를 해결할 수있는 IDE를 사용합니다.

트래비스 브라운

먼저 뻔뻔한 자기 홍보를 위해 : Eugene Burmako 와 저는 내일 Scalar 2014 에서 밀접하게 관련된 주제 인 유형 공급자에 대해 강연 할 예정입니다. 만약 여러분이 강연을 위해 모아 놓은 예제 프로젝트를 살펴 보시기 바랍니다. 이런 종류의 것에 관심이 있습니다.

형 매크로는 더 이상 지원되지 않는 동안, 당신은 본질적으로 같은 일을 수행 할 수있는 매크로 주석 에서 매크로 낙원 (스칼라 2.10와 2.11에 대한 플러그인으로 가능) :

import scala.annotation.StaticAnnotation
import scala.language.experimental.macros
import scala.reflect.macros.Context

// Add constructor arguments here.
class expand extends StaticAnnotation {
  def macroTransform(annottees: Any*) = macro Expander.expand_impl
}

object Expander {
  def expand_impl(c: Context)(annottees: c.Expr[Any]*) = {
    import c.universe._

    annottees.map(_.tree) match {
      case List(q"trait $name") => c.Expr[Any](
        // Add your own logic here, possibly using arguments on the annotation.
        q"""
          sealed trait $name
          case class Foo(i: Int) extends $name
          case class Bar(s: String) extends $name
          case object Baz extends $name
        """
      )
      // Add validation and error handling here.
    }
  }
}

그리고:

scala> @expand trait MyADT
defined trait MyADT
defined class Foo
defined class Bar
defined module Baz

예를 들어 ADT 구현을 생성하는 데 사용할 수있는 외부 리소스를 구문 분석 할 수 있도록 컴파일 타임에 사용할 수있는 주석에 인수를 추가 할 수 있습니다.

매크로 주석은 매우 실험적이며 상태가 여전히 공중에 있습니다. 예를 들어 Scala 2.12와 함께 제공된다는 보장은 없습니다. 일반 def매크로 및 구조 유형을 사용하여 유사한 (매우 깨끗하지는 않지만) 가능합니다 . 자세한 내용과 일부 데모는 위에 링크 된 예제 프로젝트를 참조하십시오 . 어쨌든 이러한 종류의 메커니즘은 Scala의 매크로 시스템 개발자를 포함하여 많은 사람들에게 흥미 롭습니다. 따라서 매크로 주석이 길의 어느 시점에서 사라지더라도 여기에서 설명한 것을 달성 할 수있는 방법이있을 것입니다. .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

DRF 직렬 변환기 클래스를 동적으로 생성

분류에서Dev

Django ModelAdmin 클래스를 동적으로 생성

분류에서Dev

주어진 클래스에 숫자를 동적으로 생성

분류에서Dev

동적으로 생성 된 변수에 동적으로 액세스

분류에서Dev

NestJ : 동적으로 클래스 인스턴스 생성

분류에서Dev

Scala에서 동적으로 클래스 속성 생성

분류에서Dev

ruby / 동적으로 생성 된 클래스에 인수 전달

분류에서Dev

클래스 유형을 동적으로 생성 / 가져 오기

분류에서Dev

동적으로 생성 된 ActiveRecord 클래스에 콜백 추가

분류에서Dev

활성 클래스를 동적으로 변경하는 방법

분류에서Dev

materializecss 체크 박스를 동적으로 생성

분류에서Dev

웹 사이트의 인스턴스를 동적으로 생성

분류에서Dev

Bash 쉘 스크립트 : 동적으로 배열 변수 생성

분류에서Dev

jQuery로 클래스를 변경하기 위해 동적으로 ID 생성

분류에서Dev

C # TypeBuilder 동적으로 함수를 사용하여 클래스 생성

분류에서Dev

클래스를 동적으로 생성 할 때 초기화 오류

분류에서Dev

유형 이름에서 동적으로 인스턴스 생성

분류에서Dev

XSLT 동적으로 네임 스페이스 생성

분류에서Dev

개체의 인스턴스를 동적으로 생성

분류에서Dev

새 인스턴스를 동적으로 생성하는 방법?

분류에서Dev

동적으로 생성 된 Radiobutton에 클래스 추가 시작 체크

분류에서Dev

Flutter Dart-동적으로 클래스 속성 가져 오기

분류에서Dev

클래스에 동적으로 속성 추가

분류에서Dev

Typescript : 클래스에 동적으로 속성 할당

분류에서Dev

클래스에 동적으로 속성 추가

분류에서Dev

리스너를 사용하여 동적으로 TextView 생성

분류에서Dev

동적으로 생성 된 텍스트 상자 자동 완성

분류에서Dev

동적으로 생성 된 리소스 파일로드 : Java

분류에서Dev

동적으로 생성되는 href에 이벤트 핸들러를 동적으로 추가

Related 관련 기사

  1. 1

    DRF 직렬 변환기 클래스를 동적으로 생성

  2. 2

    Django ModelAdmin 클래스를 동적으로 생성

  3. 3

    주어진 클래스에 숫자를 동적으로 생성

  4. 4

    동적으로 생성 된 변수에 동적으로 액세스

  5. 5

    NestJ : 동적으로 클래스 인스턴스 생성

  6. 6

    Scala에서 동적으로 클래스 속성 생성

  7. 7

    ruby / 동적으로 생성 된 클래스에 인수 전달

  8. 8

    클래스 유형을 동적으로 생성 / 가져 오기

  9. 9

    동적으로 생성 된 ActiveRecord 클래스에 콜백 추가

  10. 10

    활성 클래스를 동적으로 변경하는 방법

  11. 11

    materializecss 체크 박스를 동적으로 생성

  12. 12

    웹 사이트의 인스턴스를 동적으로 생성

  13. 13

    Bash 쉘 스크립트 : 동적으로 배열 변수 생성

  14. 14

    jQuery로 클래스를 변경하기 위해 동적으로 ID 생성

  15. 15

    C # TypeBuilder 동적으로 함수를 사용하여 클래스 생성

  16. 16

    클래스를 동적으로 생성 할 때 초기화 오류

  17. 17

    유형 이름에서 동적으로 인스턴스 생성

  18. 18

    XSLT 동적으로 네임 스페이스 생성

  19. 19

    개체의 인스턴스를 동적으로 생성

  20. 20

    새 인스턴스를 동적으로 생성하는 방법?

  21. 21

    동적으로 생성 된 Radiobutton에 클래스 추가 시작 체크

  22. 22

    Flutter Dart-동적으로 클래스 속성 가져 오기

  23. 23

    클래스에 동적으로 속성 추가

  24. 24

    Typescript : 클래스에 동적으로 속성 할당

  25. 25

    클래스에 동적으로 속성 추가

  26. 26

    리스너를 사용하여 동적으로 TextView 생성

  27. 27

    동적으로 생성 된 텍스트 상자 자동 완성

  28. 28

    동적으로 생성 된 리소스 파일로드 : Java

  29. 29

    동적으로 생성되는 href에 이벤트 핸들러를 동적으로 추가

뜨겁다태그

보관