2015-08-25 23 views
6

önceki sürümleri tarafından derlenen makro genişletmek olamaz:SBT 0.13.0 - Verilen aşağıdaki Scala

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) 
    } 
} 

inşa. 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" 

proje/build.properties

sbt.version=0.13.0 

başarıyla derlemek, ancak aşağıdaki testi çalıştırmak için çalışıyor olabilir:/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 
    } 
} 

src/test/scala/net bir derleme zamanı hatası verir: Bu answer baktığımızda

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

, beklediğimden o scalakullanarak Sbt 0.13.0 numaralı, bu sorunu giderdi.

Lütfen bu derleme zamanı hatasını nasıl çözeceğinizi bildirin.

+0

Neden "org.scalatest" yerine "org.scalatest"% "scalatest_2.10" 'kullanıyorsunuz? %% "scalatest" '? bir sebebin var mı? – ymonad

+0

Ben de benzer bir sorunum var. Bunu çözdüyseniz merak ediyorum. Benim durumumda, scalatest versiyonunu çarptım (bir engel çözüldü), fakat hala serileştirme seviyesinde problemim var. – zochhuana

+0

scala 2.10.4 veya 2.10.x FYI kullanmalısınız, http://stackoverflow.com/questions/27888182/cant-expand-macros-compiled-by-previous-versions-of-scala-scala-2-11- 4-SBT-0 – gaozhidf

cevap

11

Özellikle Scala 2.10 için derlenmiş ScalaTest sürümünü istiyorsunuz, bu yüzden compile gibi makroları düzgün şekilde genişletilmez (ve diğer yöntemlerde de Scala 2.11 ile uyumlu olma ihtimali düşüktür). (Ayrıca geçerli SBT sürümü 0.13.9, bu nedenle de bunu güncelleştirebilirsiniz.)

İlgili konular