【问题标题】:Is there any way to delete history in JShell?有什么方法可以删除 JShell 中的历史记录?
【发布时间】:2019-05-05 21:31:41
【问题描述】:

在 JShell 中,有什么方法可以删除您执行的语句,就像它从未发生过一样?

例如,假设我们有以下代码。

 JShell shell = JShell.create();
 shell.eval("int x = 5;");
 shell.eval("x = 7;");

JShell 中有什么东西可以倒退一步吗?也就是说,类似于 goBackOneStep() 的方法,在执行它之后,将 x 设置回 5。

 shell.goBackOneStep();
 shell.eval("x") // x is evaluated to 5

我注意到在JShell API 中有一个名为drop(Snippet) 的方法似乎从历史记录中删除了Snippet,但它并没有消除Snippet 对状态的任何影响。

【问题讨论】:

    标签: java java-9 jshell


    【解决方案1】:

    jshell drop jshell drop 意味着将 sn-ps 的状态更改为DROPPED 并使其处于非活动状态(因此它们不再处于活动状态,并且在您再次创建它们之前无法使用它们)

    删除一个 sn-p,使其处于非活动状态。提供导入、类、方法或变量的名称或 ID。对于多个 sn-p,用空格分隔名称和 ID。使用 /list 命令查看代码 sn-ps 的 ID。

    DROPPED

    由于显式调用 JShell.drop(Snippet),sn-p 处于非活动状态。

    在下面的代码中,您有两个snippets,通过使用drop,您使它们处于非活动状态

    JShell shell = JShell.create();
              shell.eval("int x = 5;");
              shell.eval("x = 7;");
    
        shell.snippets().forEach(s1->shell.drop(s1));
    
        shell.snippets().forEach(s2->{
            System.out.println(shell.status(s2));   //DROPPED
        });
    
       shell.snippets().forEach(System.out::println);  //we print all active and inactive snippets
    

    同样你也可以在jshell控制台中看到所有活动和丢弃的sn-ps

    /list [选项]

    显示 sn-ps 及其 ID 的列表。如果未输入任何选项,则显示所有活动的 sn-ps,但不显示启动 sn-ps。

    /list -all

    显示所有 sn-ps,包括启动 sn-ps 和失败、被覆盖或被丢弃的 sn-ps。以 s 开头的 ID 是启动 sn-ps。以 e 开头的 ID 是失败的 sn-ps。

    JShell 中有什么东西可以倒退一步吗?

    在 jshell 中,每个输入都是一个 sn-p,因此无法回滚 sn-ps。

    输入应该正好是一份完整的源代码sn-p,即一个表达式、语句、变量声明、方法声明、类声明或导入。要将任意输入分解为单个完整的 sn-ps,请使用 SourceCodeAnalysis.analyzeCompletion(String)。

    【讨论】:

    • 谢谢。您是否知道任何类似于 JShell 的东西可以保留程序当前状态的历史记录(逐行)但也可以倒退?
    • 另外,最初的反对票是因为起初我没有看到你在哪里回答了我的问题。看来您只是在谈论drop(Snippet),这与我正在寻找的内容有些相提并论。当我读完整本书时,我把它倒过来了。我可能会将那部分放在开头以供将来回答
    • 我不认为你能找到这样的东西 Do you know of anything similar to JShell that could keep a history of the current state of a program (line by line) @Lindstorm
    猜你喜欢
    • 1970-01-01
    • 2019-10-09
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    相关资源
    最近更新 更多