代码之家  ›  专栏  ›  技术社区  ›  Andremoniy

在JShell中访问“父范围”

  •  7
  • Andremoniy  · 技术社区  · 8 年前

    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 回复  |  直到 8 年前
        1
  •  7
  •   GhostCat    8 年前

    根据 this 关于JShell的一个大警告是:它在其 JVM。

    javadoc for create()

    相当于JShell。生成器()。build()。

    当你关注javadoc时 build() ,您会发现:

    构建JShell状态引擎。这是所有JShell功能的入口点。这将创建一个 用于执行。因此,关闭返回的实例很重要。

    换句话说:很可能,你正在创造 另一个shell运行的JVM实例。所以至少现在是这样:没有机会 小孩

    推荐文章