【问题标题】:Predefine routine in scala sbt console?在scala sbt控制台中预定义例程?
【发布时间】:2014-01-14 23:52:35
【问题描述】:

我最近在写scala,用sublimetext写*.scala,在另一个窗口运行sbt。

我在使用sbt console调试的时候,每次都需要手动导入包,做套路。

重新编译重启控制台后一次又一次地重复复制代码真的很烦人。

我想知道有没有办法设置一个预定义的环境来手动完成?

我想知道的另一个问题是在控制台 REPL 中,我可以通过初始字符自动完成行吗?例如在 python IDLE 中,可以使用 Alt+p 来搜索历史。真的很方便。

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    初始命令

    您可以将此行添加到您的build.sbt:

    initialCommands in console := "import scalaz._, Scalaz._"
    

    结果:

    $ sbt console
    [info] Starting scala interpreter...
    [info]
    import scalaz._
    import Scalaz._
    Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_45).
    Type in expressions to have them evaluated.
    Type :help for more information.
    
    scala>
    

    REPL 自动完成

    您可以点击Tab 键来获得有限的自动完成功能:

    scala> List(1, 2, 3)
    res0: List[Int] = List(1, 2, 3)
    
    scala> res0.ap
    

    第一个Tab - 自动完成和选项:

    scala> res0.apply
    apply         applyOrElse
    

    第二个Tab - 方法签名:

    scala> res0.apply
                           def apply(n: Int): A
    

    历史

    您可以使用Ctrl+R 搜索历史记录(包括以前 REPL 会话的历史记录)。使用加法Ctrl+R 得到下一个结果。

    【讨论】:

    • 这是一个常识,但以防万一:你知道你可以在REPL 中使用向上和向下箭头吗?
    • 我知道。但例如,如果我需要重复最后 5 个命令,我需要按 25 次。这对手指来说是个沉重的负担。
    • 在 2.11 中,:hi 然后:edit 2492+2 为那里的两行,退出编辑器执行。
    【解决方案2】:

    另外可能值得注意的是,您也可以将脚本加载到 repl 中:

    $ cat > guessing.txt
    import scala.util.Random.nextInt
    def guess() {
      val r = nextInt()
      println("I randomly picked %d.".format(r))
    }
    
    $ sbt console
    scala> :load guessing.txt
    Loading guessing.txt...
    import scala.util.Random.nextInt
    guess: ()Unit
    
    scala> guess
    I randomly picked -630907258.
    

    :help 是你的朋友。

    【讨论】:

      猜你喜欢
      • 2012-09-24
      • 2019-04-26
      • 2018-02-20
      • 2013-04-30
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      相关资源
      最近更新 更多