2012-09-27 9 views
6

-Hi। मैं अपने ऐप में प्रारंभिक वातावरण के साथ स्कैला आरपीएल को एम्बेड करना चाहता हूं। मैंने IMain कक्षा को देखा है और ऐसा लगता है कि मैं इसे इसके उदाहरण के माध्यम से कर सकता हूं। उदाहरण बनाया गया है और फिर intpILoop में सार्वजनिक var में संग्रहीत किया गया है।स्कैला - आरईपीएल पर्यावरण शुरू करें

process() (उदाहरण के लिए आरईपीएल से पहले) कुछ नाम कैसे जोड़ सकते हैं और/या कुछ आयात जोड़ सकते हैं?

के बाद कोड लाइन 3 पर विफल रहता है क्योंकि intp अभी तक नहीं बनाया गया है (=> एनपीई):

val x = 3 
    val interp = new ILoop 
    interp.bind("x", x) // -> interp.intp.bind("x", x) 
    val settings = new Settings 
    settings.usejavacp.value = true 
    interp.process(settings) 

हैं- धन्यवाद।

अद्यतन: अधिभावी createInterpreter() दुर्भाग्य से काम नहीं करता है:

val x = 3 
    val interp = new ILoop { 
     override def createInterpreter() { 
      super.createInterpreter() 
      intp.bind("x", x) // -> interp.intp.bind("x", x) 
     } 
    } 
    val settings = new Settings 
    settings.usejavacp.value = true 
    interp.process(settings) 

दुभाषिया इनपुट पर अटक जाता है (, गतिरोध की तरह दिखता है ऊपर कोड के साथ ही होता है):

x: Int = 3 
Failed to created JLineReader: java.lang.NoClassDefFoundError: scala/tools/jline/console/completer/Completer 
Falling back to SimpleReader. 
Welcome to Scala version 2.9.2 (OpenJDK 64-Bit Server VM, Java 1.7.0_06-icedtea). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> println 
<infinite_sleep> 

धन्यवाद सुझाव के लिए dvigal।

उत्तर

4

एक GitHub परियोजना scala-ssh-shell कहा जाता है जो कम से कम तुम क्या चाहते हो सकता है, या आप करीब है।

+0

अद्यतन किया है मैंने प्रोजेक्ट को देखा और ऐसा लगता है कि यह काम करेगा। धन्यवाद। – woky

1

हाय, माफ करना मैं नहीं स्काला आरईपीएल हैकर लेकिन मुझे लगता है कि आप की तरह कुछ कर सकते हैं:

class YourILoop(in0: Option[BufferedReader], protected override val out: JPrintWriter)   
    extends ILoop(in0, out) { 
    override def createInterpreter() { 
     if (addedClasspath != "") 
      settings.classpath append addedClasspath 

      intp = new ILoopInterpreter 
      val x = 3; 
      intp.bind("x", x) 
    } 
} 
object Run { 
    def errorFn(str: String): Boolean = { 
     Console.err println str 
     false 
    } 

    def process(args: Array[String]): Boolean = { 
     val command = new GenericRunnerCommand(args.toList, (x: String) => errorFn(x)) 
     import command.{ settings, howToRun, thingToRun } 
     new YourILoop process settings 
    } 
    def main(args: Array[String]) { 
     process(args) 
    } 
} 
+0

अच्छा एक, धन्यवाद, दुर्भाग्य से यह काम नहीं करता है, मैंने जवाब – woky

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