2017-09-14 23 views
7

Başka bir JShell içinde oluşturulan JShell nesnesinin, JShell kapsamına erişemediği anlaşılıyor. Örneğin,JShell'de "ana kapsam" Erişim

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

jshell> x 
x ==> 1 

jshell> jdk.jshell.JShell js = jdk.jshell.JShell.create(); 
js ==> [email protected] 

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)] 

Ebeveyn kapsamının bir çocuğa görünmesini sağlamak mümkün mü?

+0

nasılsa 'dan x'' değerini erişmeye ifade ediyor (olduğu gibi ben ciddi Java'nın bu REPL özelliği zaten çalışan JVM bir JShell takmak için bazı gelecekteki noktada izin umuyoruz) Örneğinizde JShell' örneği 'js'? – nullpointer

+0

@nullpointer tam olarak – Andremoniy

cevap

7

this'a göre JShell ile ilgili büyük bir uyarı: kendi JVM.

create() için javadoc diyor:. JShell.builder eşdeğerdir

() inşa().

Ve build() için javadoc için izlediğinizde, bulmak:

Yapı bir JShell devlet motoru. Bu, tüm JShell işlevlerinin giriş noktasıdır. Bu, yürütme için bir uzaktan işlemi oluşturur. Bu nedenle döndürülen örneği kapatmak önemlidir. Başka bir deyişle

: büyük olasılıkla, nerede bu diğer kabuk çalışır başka JVM örneği yaratıyor. En azından şimdilik: çocuk jshell sahip olma şansı, ebeveyn hakkında bilgi sahibi değil.

:

+0

Evet, bu doğru, yeni bir JVM başlatır. Diğer taraftan, JShell sınıfında bir şekilde ebeveyn JShell ile bağlanmasına izin veren bazı özel yöntemler olabileceğini düşündüm. Cevabınızı kabul etme eğilimindeyim, ama diğer fikirler için biraz bekleyelim – Andremoniy

+1

@Andremoniy [jython] 'a alışmak (http://www.jython.org/) Bu jshell'in bulunamadığını gerçekten hayal kırıklığına uğrattım ** ** mevcut bir JVM'ye bağlanın. Bu kısıtlama, bu özelliğin "kullanışlılığı" nın yarısını alır. Ama belki de Java 10 ya da öylesine ve bu kısmı düzeltiyorlar. – GhostCat