- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从 jShell 脚本内部,是否可以访问或注册在创建 JShell 的代码中定义的变量?
目前似乎没有机制可以访问或向 Shell 实例注册变量,或者从 JShell 内部返回任何字符串类型(如对象或 lambda 等)
例如:
import jdk.jshell.JShell; import jdk.jshell.JShellException; import jdk.jshell.SnippetEvent; import java.util.List; public class Main { public static void main(String[] args) throws JShellException { var localVar = 1; JShell shell = JShell.create(); // How to register localVar variable with shell instance or access variables from scope List events = shell.eval("var x = localVar;"); SnippetEvent event = events.get(0); System.out.println("Kind: " + event.snippet().kind() + ", Value: " + event.value()); } }
最佳答案
虽然您无法像示例中那样访问本地名称,但您可以创建一个 JShell 实例,该实例在创建它的同一 JVM 中执行。为此,您可以使用 LocalExecutionControl
。使用此执行控制,您可以移动 localVar
到 Main
中的静态字段类,然后从 JShell 代码“内部”访问它 Main.localVar
.
不幸的是,由于 API 旨在支持可能位于不同进程甚至不同机器中的执行提供程序,因此返回类型是字符串。如果您对 hack 感兴趣,IJava jupyter 内核需要实现 eval
返回 Object
最终使用 ExecutionControl
基于DirectExecutionControl
的实现存储 eval
的结果调用映射并返回一个唯一的 id 来引用该结果。然后使用 shell,您必须从 eval
返回的 id 查找结果。 (想想类似 results.get(eval(sourceCode))
的东西)。该实现是 on github in IJavaExecutionControl.java和 IJavaExecutionControlProvider.java示例用法见 CodeEvaluator.java#L72如果您有兴趣获得其中任何一个(麻省理工学院许可证)。
关于java-9 - JShell 访问 jshell 实异常(exception)部定义的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57772395/
我需要计算像这样存储的 2 个短数据数组的 FFT(重复百万次): 等等。 数组值用黄色和蓝色表示。每个 K 值都有一个大小为 K 的未使用数据空间,我需要跳过。 我对数据进行了重新排序(和 floa
我是一名优秀的程序员,十分优秀!