在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(。