问题 在Scala REPL中导入多个包


在Scala中,我经常需要导入多个包含implicits和其他实用程序的包,特别是在REPL上:

import scala.collection.JavaConversions._
import scala.collection.{mutable => mut}
import com.myapp.db._
import com.orm._
val con = connectDb(...)
...

我知道在Scala中没有办法导入多个包(虽然包对象范围可以帮助一点),但是从REPL呢?有没有办法在没有大量复制和粘贴的情况下从REPL执行此操作?我也尝试过使用:load,但在那里导入/创建的东西也没有被引入REPL的范围。我注意到了:power命令  将东西导入范围。

更新:load 其实  工作。


7133
2017-08-05 23:31


起源

你什么意思 “但在那里导入/创建的东西也没有被引入REPL的范围” 使用时 :load?对我来说,对于进口和物品来说似乎工作得很好...... - huynhjl
你是对的 - 我错了尝试 mut.<TAB> 并认为缺乏完成意味着没有任何进口。 - Yang
TAB 是一个递归的缩写 TABs Are Broken。 - som-snytt


答案:


我不确定一般解决方案,但在SBT中可以配置项目,以便控制台(REPL)在启动时运行一些初始命令。这是一段摘录 build.sbt 文件

// set the initial commands when entering 'console' only
initialCommands in console := "import myproject._"

编辑:另一个参考是Scalala项目。他们有个 Scala计划 启动嵌入式REPL并填写必要的导入。有关用法,请参阅他们的 快速入门指南


12
2017-08-05 23:44



另请注意,您可以创建一个脚本,该脚本使用SBT来调用具有特定配置的REPL。请参阅SBT 0.10关于脚本的wiki。 - Daniel C. Sobral
@丹尼尔甜蜜!您知道是否可以使用SBT启动非REPL应用程序吗? - Kipton Barros
您可以使用它来启动Scala脚本 - 在我提到的同一页面上有一个示例,xsbt wiki上的脚本页面。 - Daniel C. Sobral
initialCommands对我来说不像我在问题中指定的方式 - 行执行,但符号实际上没有引入REPL范围。尽管如此,将你的答案标记为已被接受,因为:实际加载 不 工作。 - Yang
@Yang,关键是你没有通过输入“scala”来启动REPL,而是输入“sbt console”来启动REPL。然后,您可以导入build.sbt的依赖项中指定的所有包 - Minnie Shi