Scala квазиквота unlifting не компилируется в IntelliJ?

Возможно, я делаю что-то не так, но я следую документации здесь, https://docs.scala-lang.org/overviews/quasiquotes/unlifting.html

который говорит

 val q"${left: Int} + ${right: Int}" = q"2 + 2"
 left: Int = 2
 right: Int = 2

Поэтому я пишу такой код, и он не компилируется в IntelliJ. Это говорит мне, что оба left а также right имеют тип Trees#Tree, Документация неверна или есть какая-то другая проблема? IntelliJ не может это скомпилировать, но sbt может?

Мой пример кода:

package com.example.macros

import scala.reflect.macros.blackbox

object Quasiquotes1 {

 def matchLiteralInt(val c: blackbox.Context)(iexpr: c.Expr[Int]): Tree = {

  import c.universe._

    // This is the example from https://docs.scala-lang.org/overviews/quasiquotes/unlifting.html,
    // and it does not compile.
    val q"${left: Int} + ${right: Int}" = q"2 + 2"

    // Extract the literal integer from the tree.
    val q"${x: Int}" = iexpr.tree // does not compile either
    iexpr.tree match {
      case q"${x: Int}" => ??? // does not compile
    }
    iexpr
  }
}

0 ответов

Другие вопросы по тегам