Доступ к "родительской области" в 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)