2012-02-17 12 views
6

नहीं चल रहा है मैं scala.tools.sbt साथ एक समस्या हैस्काला एसबीटी: scala.tools.nsc

स्केला फ़ाइल

यहाँ मैं पार्सर कार्यक्षमता का उपयोग किया की सार वाक्य रचना पेड़ बनाने के लिए कोड 2 + 3

import scala.tools.nsc._ 
object Main extends App { 
    var i = new Interpreter 
    println(i.parse("2 + 3")) 
} 

एसबीटी विन्यास

name := "scalaSample" 

version := "1.0-SNAPSHOT" 

scalaVersion := "2.9.1" 

libraryDependencies += "org.scalatest" %% "scalatest" % "1.7.1" % "test" 

libraryDependencies += "org.scala-lang" % "scala-compiler" % "2.9.1" 

त्रुटि

संकलक प्रारंभ करने में विफल: वस्तु स्केला नहीं मिला। ** ध्यान दें कि 2.8 स्कैला के रूप में जावा क्लासपाथ का उपयोग नहीं किया जाता है। ** पुराना व्यवहार पास -usejavacp को स्कैला के लिए, या सेटिंग्स ** प्रोग्रामिंग का उपयोग करते हुए, सेटिंग्स.usejavacp.value = true।

[त्रुटि] (रन-मुख्य) java.lang.NullPointerException scala.tools.nsc.CompilationUnits $ CompilationUnit पर java.lang.NullPointerException। (CompilationUnits.scala: 16) scala.tools.nsc.interpreter.ExprTyper $ codeParser $ .applyRule (ExprTyper.scala: 22) पर scala.tools.nsc.interpreter.ExprTyper $ codeParser $ .stmts पर (ExprTyper .scala: 36) scala.tools.nsc.interpreter.ExprTyper $$ anonfun $ पार्स $ 2.Apply (ExprTyper.scala पर: 47) पर scala.tools.nsc.interpreter.ExprTyper $$ anonfun $ पार्स $ 2 .apply (ExprTyper.scala: 46) scala.tools.nsc.reporters.Reporter.withIncompleteHandler पर (Reporter.scala: 46) scala.tools.nsc.interpreter.ExprTyper $ class.parse पर (ExprTyper.scala : 46) scala.tools.nsc.interpreter.IMain पर $ exprTyper $ .parse (IMain.scala: 1012) scala.tools.nsc.interpreter.IMain.parse (IMain.scala: 1013) पर eu.semantiq.scalaToJS.Main $ देरी $ body.apply (मुख्य। स्कैला: 7) स्कैला.फंक्शन 0 $ वर्ग.प्ली $ एमसीवी $ एसपी (Function0.scala: 34) पर scala.runtime.AbstractFunction0.apply $ mcV $ sp (abstractFunction0.scala: 12) scala.App $ पर $ anonfun $ main $ 1.apply (App.scala: 60) scala.App $$ anonfun $ main $ 1.apply (App.scala: 60) scala.collection.LinearSeqOptimized $ class.foreach (LinearSeqOptimized.scala: 59) scala.collection.immutable.List.foreach (List.scala: 45) scala.collection.generic.TraversableForwarder $ class.foreach (TraversableForwarder.scala: 30) scala.App $ class.main पर (App.scala: 60)परeu.semantiq.scalaToJS.Main $ मुख्य (Main.scala: 5) सूरज पर sun.reflect.NativeMethodAccessorImpl.invoke0 (मूल निवासी विधि) पर eu.semantiq.scalaToJS.Main.main (Main.scala) पर .reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) पर java.lang.reflect.Method.invoke (Method.java:616) पर जावा .lang.RuntimeException: Nonzero निकास कोड: scala.sys.package $ .error (पैकेज।स्केला: 27)

स्केला आरईपीएल सब कुछ स्काला संस्करण 2.9.0.1 (OpenJDK 64-बिट सर्वर वी एम, जावा 1.6.0_23) के लिए काम करता है

आपका स्वागत है। मूल्यांकन के लिए अभिव्यक्तियों में टाइप करें। टाइप करें: अधिक जानकारी के लिए मदद करें।

स्केला>आयात scala.tools.nsc._

आयात scala.tools.nsc._

स्केला>वर मैं = नए दुभाषिया

चेतावनी: वहाँ थे 4 बहिष्करण चेतावनियां; विवरण चेतावनी के लिए दोहराव के साथ पुन: चलाएं: 1 बहिष्करण चेतावनियां थीं; विवरण

के लिए -deprecation साथ दोबारा चलाता है मैं: scala.tools.nsc.Interpreter = [email protected]

स्केला>println (i.parse ("2 + 3"))

कुछ (सूची (2. $ प्लस (3)))

मुझे लगता है वास्तव में मेरा बुरा अंग्रेजी

उत्तर

4

अनुसार के लिए खेद है xsbt के FAQ रहे हैं:

एसबीटी ही एसबीटी रूप में एक ही JVM में परीक्षण चलाता है और स्काला कक्षाएं आवेदन वर्ग के रूप में एक ही कक्षा लोडर में नहीं हैं।

और वहाँ और भी है:

कुंजी दुभाषिया embeddedDefaults प्रयोग करने के लिए सेटिंग प्रारंभ करने में है।

उदाहरण दिया गया है कि कुछ मनमाना प्रकार MyType का उपयोग किया गया है। वास्तव में, आप उपयुक्त वर्ग लोडर को खोजने में मदद करने के लिए अपने किसी भी प्रकार का उपयोग कर सकते हैं (this answer देखें)।

इसलिए, अपने कोड इस तरह दिखना चाहिए:

import scala.tools.nsc._ 

trait Foo // Arbitrary type added to get stuff working 

object Main extends App { 
    val settings = new Settings 
    settings.embeddedDefaults[Foo] 
    val interpreter = new Interpreter(settings) 
    println(interpreter.parse("2 + 3")) 
}