有什么方法可以在Jshell中删除历史记录



在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对状态的任何影响。

jshell drop jshell drop表示将摘要的状态更改为 DROPPED并使它们变得不活跃(因此它们不再活跃,您无法使用它们,直到创建创建之前,您才能使用它们再次(

掉落片段,使其不活跃。提供导入,类,方法或变量的名称或ID。对于一个以上的片段,将名称和ID与空间分开。使用/列表命令查看代码段的ID。

删除

由于对jshell.drop的明确调用(代码(。

在下面的代码中,您有两个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控制台中查看所有活动和删除片段

/list [选项]

显示摘要及其ID列表。如果没有输入选项,则显示所有活动片段,但启动片段却没有。

/list -all

显示所有片段,包括失败的启动片段和片段,被覆盖或删除。以S开头的ID是启动片段。以E开头的ID是失败的片段。

JSHELL中是否有一些步骤?

在jshell中,每个输入正好是一个片段,因此无法回滚。

输入应该是源代码的一个完整片段,即,一个表达式,语句,可变声明,方法声明,类声明或导入。要将任意输入分解为单个完整的片段,请使用Sourcodeanalysis.Analyzecompletion(String(。

最新更新