JShell access to variables defined outside of jshell instance

后端 未结 1 867
花落未央
花落未央 2021-01-05 13:36

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

1条回答
  •  清酒与你
    2021-01-05 14:22

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

    0 讨论(0)
提交回复
热议问题