【问题标题】:Scala REPL startup command lineScala REPL 启动命令行
【发布时间】:2018-10-19 00:45:15
【问题描述】:

当我启动 Scala REPL 时,有没有办法将 Scala 代码或源文件放在命令行上以自动运行?为了方便用户,我希望在启动时自动完成一些导入(在 bash 脚本的命令行上)。

【问题讨论】:

  • 文档首先提到-i...
  • 感谢您的提示。我在谷歌上搜索了所有我能想到的东西,但我找不到深蹲。然后我意识到我只需要输入“scala -help”。呸! -i 选项有效,但它需要一个单独的文件。 -e 选项会更好,因为我可以将文本输入到 bash 脚本中,而不需要单独的文件。不幸的是,-e 选项不起作用,因为它一执行字符串就退出 REPL。

标签: scala read-eval-print-loop


【解决方案1】:

使用 Ammonite 代替 Scala REPL。它比 Scala REPL 好得多。

关于 ammonite 最好的部分是您可以在 ~/.ammonite 文件夹下创建一个名为 predef.sc 的文件。在这里你可以指定像interp.load.ivy("joda-time" % "joda-time" % jodaVersion)这样的SBT依赖,也可以像import scala.concurrent.ExecutionContext.Implicits.global这样导入

现在每次启动 ammonite REPL 时,所有 SBT 依赖项和导入都已经存在。太酷了。

【讨论】:

  • Ammonite 听起来很棒,但如果你真的想看到它起飞,你需要从 Scala 和/或 Linux 社区获得支持。如果它稳定且开箱即用,它可能有机会起飞。是的,bash 是古怪而原始的,但是我花了很多时间来学习这些怪癖,并且我不愿意爬上 Ammonite 的学习曲线,除非我知道它得到了很好的支持、广泛可用并且可以继续使用。但你可能已经知道了。
【解决方案2】:

如果您的项目有一个build.sbt 文件,那么您可以在该文件中添加类似这样的内容:

initialCommands in console :=
"""
import java.net._
import java.time._
import java.time.format._
import java.time.temporal._
import javax.mail._
import javax.mail.internet._
"""

不知道这有多清楚,但它只是一个使用三引号的块字符串

将基础类集合(任何对您的工作有意义的类)放在手边可以节省大量时间!

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 2019-03-01
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多