gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:36:33 25 4
gpt4 key购买 nike

鉴于以下情况:

src/main/scala/net/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/test/scala/net/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 版本,因此其宏如 compile不会被正确扩展(并且很可能在其他方面也不与 Scala 2.11 兼容)。 (此外,当前的 SBT 版本是 0.13.9,因此您可能也想更新到它。)

关于scala - SBT 0.13.0 - 无法扩展以前版本的 Scala 编译的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32195227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com