【问题标题】:How to save REPL session?如何保存 REPL 会话?
【发布时间】:2014-02-28 20:00:41
【问题描述】:

是否可以将 REPL 会话保存在文件中?是否需要最低版本的 Scala 来执行此操作?我记得看到有人这样做,但我无法在 :help 或文档中对其进行处理。

【问题讨论】:

    标签: scala read-eval-print-loop


    【解决方案1】:

    这在 Scala 2.11 中是可能的。 用法示例:

    scala> 1
    res0: Int = 1
    
    scala> 2
    res1: Int = 2
    
    scala> 3
    res2: Int = 3
    
    scala> :save xxx
    
    scala> :load xxx
    Loading xxx...
    res3: Int = 1
    res4: Int = 2
    res5: Int = 3
    

    您可以在:load 之前:reset 以获得对结果的正确引用:

    scala> 1
    res0: Int = 1
    
    scala> res0 + 1
    res1: Int = 2
    
    scala> :save xxx
    

    那天晚些时候...

    scala> 7
    res0: Int = 7
    
    scala> :reset
    Resetting interpreter state.
    Forgetting this session history:
    
    7
    
    Forgetting all expression results and named terms: $intp
    
    scala> :load xxx
    Loading xxx...
    res0: Int = 1
    res1: Int = 2
    

    【讨论】:

    • 公平地说,它 在 2.10 中从 :help 中丢失 :)。
    • @som-snytt 我将我的项目编译为 2.10,而不是 2.11,它会编译为 2.11,还是仅将 2.11 用于 sbt 本身?还是您的意思是这是在 2.11 中添加的?
    【解决方案2】:

    请注意,除了原生 Scala REPL 之外,您还有 shell 脚本项目 Ammonite,它确实有一个 Save/Loadd Session feature

    除了简单的保存和加载(在最近一次保存后简单地丢弃所有内容)之外,您还可以为这些函数提供名称。
    这让你可以停止在一个分支上工作,去做一些别的事情,然后可以稍后再回来继续你离开的地方:

    @ val (x, y) = (1, 2)
    x: Int = 1
    y: Int = 2
    
    @ sess.save("xy initialized")
    
    @ val z = x + y
    z: Int = 3
    
    @ sess.save("first z")
    
    @ sess.load("xy initialized")
    
    @ val z = x - y
    z: Int = -1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-05
      • 2018-05-05
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多