加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

嵌入式Scala REPL 2.10的解释器示例

发布时间:2020-12-16 09:21:26 所属栏目:安全 来源:网络整理
导读:请给出一个代码示例,说明如何在Scala 2.10中以编程方式创建一个嵌入式Scala REPL解释器. (我花了几个小时梳理各种代码废料后,补充了这个问答,以获得一个有效的口译员) 解决方法 示例Repl.scala: import scala.tools.nsc.interpreter._import scala.tools.ns
请给出一个代码示例,说明如何在Scala 2.10中以编程方式创建一个嵌入式Scala REPL解释器. (我花了几个小时梳理各种代码废料后,补充了这个问答,以获得一个有效的口译员)

解决方法

示例Repl.scala:

import scala.tools.nsc.interpreter._
import scala.tools.nsc.Settings


object Repl extends App {
  def repl = new ILoop {
    override def loop(): Unit = {
      intp.bind("e","Double",2.71828)
      super.loop()
    }
  }

  val settings = new Settings
  settings.Yreplsync.value = true


  //use when launching normally outside SBT
  settings.usejavacp.value = true      

  //an alternative to 'usejavacp' setting,when launching from within SBT
  //settings.embeddedDefaults[Repl.type]

  repl.process(settings)
}

一些笔记

>我选择显示JLineReader(默认)而不是SimpleReader,因为它工作得更好,正确处理箭头键,删除等.JLine确实添加了一个jar依赖.
>该示例显示如何将值绑定到repl(上面的变量e).
>当我省略settings.Yreplsync.value = true时,REPL挂起并没有用.
>从我的测试,如果usejavacp和embeddedDefaults设置都组合在一起,则会导致错误

我发现这最容易通过SBT测试;一个示例build.sbt:

name := "Repl"

organization := "ExamplesRUs"

scalaVersion := "2.10.2"

libraryDependencies ++= Seq(
 "org.scala-lang" % "scala-compiler" % "2.10.2","org.scala-lang" % "jline" % "2.10.2"
)

SBT会议示例

> run-main Repl
[info] Running Repl
Welcome to Scala version 2.10.2 (Java HotSpot(TM) 64-Bit Server VM,Java 1.6.0_37).
Type in expressions to have them evaluated.
Type :help for more information.
e: Double = 2.71828

scala> 2 * e
res1: Double = 5.43656

scala>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读