From inside jShell script, is it possible to access or register variables that are defined in code that\'s also creating JShell?
Currently there seems to be no mecha
While you can't access local names like in your example, you can create a JShell instance that executes in the same JVM that created it. For this you would use the LocalExecutionControl. Using this execution control you could move localVar
to a static field in your Main
class and then access it from "inside" the JShell code with Main.localVar
.
Unfortunately as the API is designed to support execution providers that could be in a different process or even a different machine, the return type is a string. If you are interested in a hack, the IJava jupyter kernel needed to an implementation of eval
that returned an Object
which ended up using an ExecutionControl
implementation based on the DirectExecutionControl
that stored the result of an eval
call in a map and returned a unique id to reference that result. Then using the shell you would have to lookup the result from the id returned by eval
(think of something like results.get(eval(sourceCode))
). That implementation is on github in IJavaExecutionControl.java and IJavaExecutionControlProvider.java with a sample usage in CodeEvaluator.java#L72 if you are interested in taking any of it (MIT license).