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,所以你可能也希望更新它.)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |