2015-08-25 5 views
6

के पिछले संस्करणों के द्वारा संकलित मैक्रो का विस्तार नहीं कर सकते निम्नलिखित को देखते हुए:एसबीटी 0.13.0 - स्काला

src/मुख्य/स्केला/नेट/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) 
    } 
} 

निर्माण। एसबीटी

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 को देखते हुए, मैं उम्मीद है कि स्केला 0,123,223 का उपयोग कर Sbt 0.13.0 के साथइस समस्या को ठीक कर देगा।

कृपया मुझे बताएं कि इस संकलन-समय त्रुटि को कैसे हल करें।

+0

आप "org.scalatest"% "scgatest_2.10" '' org.scalatest "के बजाय क्यों उपयोग कर रहे हैं %% "स्केलटेस्ट" '? क्या आपके पास कोई कारण है? – ymonad

+0

मुझे भी इसी तरह की समस्या है। आश्चर्य है कि क्या आपने इसे हल किया है? मेरे मामले में, मैंने स्केलेटेस्ट संस्करण (एक बाधा हल) को टक्कर लगी है, लेकिन मुझे अभी भी क्रमबद्धता स्तर पर समस्या मिली है। – zochhuana

+0

आपको स्कैला 2.10.4 या 2.10.x एफवाईआई का उपयोग करना चाहिए, http://stackoverflow.com/questions/27888182/cant-expand-macros-compiled-by-previous-versions-of-scala-scala-2-11- 4-एसबीटी -0 – gaozhidf

उत्तर

11

आप विशेष रूप से स्कैलास्ट संस्करण का अनुरोध कर रहे हैं जिसे स्कैला 2.10 के लिए संकलित किया गया है, इसलिए compile जैसे मैक्रोज़ का विस्तार सही ढंग से नहीं किया जाएगा (और यह संभवतः अन्य तरीकों से स्कैला 2.11 के साथ संगत नहीं होने की संभावना है)। (इसके अलावा वर्तमान एसबीटी संस्करण 0.13.9 है, इसलिए आप इसे भी अपडेट करना चाहते हैं।)

संबंधित मुद्दे