加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

SBT 0.13.0 – 无法扩展以前版本的Scala编译的宏

发布时间:2020-12-16 19:16:04 所属栏目:安全 来源:网络整理
导读:鉴于以下内容: 的src / main /斯卡拉/网/ Equals5.scala package netimport scala.language.experimental.macrosimport scala.reflect.macros.Contextcase class Equals5(value: Int) { require(value == 5)}object Equals5 { implicit def wrapInt(n: Int)
鉴于以下内容:

的src / main /斯卡拉/网/ Equals5.scala

package net

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

case class Equals5(value: Int) {
    require(value == 5)
}

object Equals5 {
    implicit def wrapInt(n: Int): Equals5 = macro verifyIntEquals5

    def verifyIntEquals5(c: Context)(n: c.Expr[Int]): c.Expr[Equals5] = {
    import c.universe._

    val tree = n.tree match {
      case Literal(Constant(x: Int)) if x == 5 =>
        q"_root_.net.Equals5($n)"
      case Literal(Constant(x: Int)) =>
        c.abort(c.enclosingPosition,s"$x != 0")
      case _ => 
        q"_root_.net.Equals5($n)"
    }
    c.Expr(tree)
  }
}

build.sbt

val paradiseVersion = "2.1.0-M5"

scalaVersion := "2.11.7"

libraryDependencies += "org.scala-lang" % "scala-reflect" % "2.11.7"

libraryDependencies += "org.scalatest" % "scalatest_2.10" % "3.0.0-M7"

项目/ build.properties

sbt.version=0.13.0

我可以成功编译,但尝试运行以下测试:

的src /测试/阶/净/ Equals5Test.scala

package net

import org.scalatest.Matchers

import org.scalatest._
import org.scalatest.prop.Checkers._

class Equals5Test extends FlatSpec with Matchers {

    "Trying to create an `Equals5` case class with an invalid Int" should "fail to compile" in {
        "Equals5(-555)" shouldNot compile
    }
}

给出编译时错误:

.../Equals5Test.scala:11: can't expand macros compiled 
      by previous versions of Scala
[error]         "Equals5(-555)" shouldNot compile
[error]                                   ^

看看这个answer,我预计使用scala 2.11和sbt 0.13.0会解决这个问题.

请让我知道如何解决此编译时错误.

解决方法

您特别请求为Scala 2.10编译的ScalaTest版本,因此其编译的宏将无法正确扩展(并且很可能在其他方面也不兼容Scala 2.11). (目前的SBT版本也是0.13.9,所以你可能也希望更新它.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读