Доступ к "родительской области" в JShell

Кажется, что JShell объект, созданный внутри другого JShell не имеет доступа к родителям JShell объем. Например:

jshell> int x = 1;
x ==> 1

jshell> x
x ==> 1

jshell> jdk.jshell.JShell js = jdk.jshell.JShell.create();
js ==> jdk.jshell.JShell@1a052a00

jshell> js.eval("x");
$4 ==> [SnippetEvent(snippet=Snippet:ErroneousKey#1-x,previousStatus=NONEXISTENT,status=REJECTED,isSignatureChange=false,causeSnippetnull)]

jshell> js.eval("int x = 2;");
$5 ==> [SnippetEvent(snippet=Snippet:VariableKey(x)#2-int x = 2;,previousStatus=NONEXISTENT,status=VALID,isSignatureChange=true,causeSnippetnullvalue=2)]

jshell> js.eval("x");
$6 ==> [SnippetEvent(snippet=Snippet:ExpressionKey(x)#3-x,previousStatus=NONEXISTENT,status=VALID,isSignatureChange=true,causeSnippetnullvalue=2)]

Возможно ли как-то сделать родительскую область видимостью дочерней?

1 ответ

Решение

В соответствии с этим есть одна большая оговорка о JShell: она работает в своей собственной JVM.

Javadoc для create() говорит:

Эквивалент JShell.builder(). Build().

И когда вы переходите к javadoc для build (), вы обнаруживаете:

Создайте движок состояния JShell. Это точка входа во все функциональные возможности JShell. Это создает удаленный процесс для выполнения. Поэтому важно закрыть возвращенный экземпляр.

Другими словами: скорее всего, вы создаете другой экземпляр JVM, в котором запускается эта другая оболочка. Так что, по крайней мере, на данный момент: нет никаких шансов иметь дочерний jshell о его родителе.

(как в: я серьезно надеюсь, что эта функция REPL в Java позволит в будущем подключить JShell к уже работающей JVM)

Другие вопросы по тегам