使用jshell,有没有办法在解释器的范围内创建变量?我有类似
的东西Map<String,Object> vars = loadVarsFromSomething();
我希望能够做类似
的事情for ( Map.Entry<String,Object> key : vars )
{
scope.put( key.getKey(), key.getValue() );
}
这可能吗?
请注意&#34;范围&#34;我指的是jshell解释器正在使用的Shell对象的实际范围。我需要获取一个shell的引用,该代码被调用,以便我可以创建看起来像的变量如果他们是由用户/来电者分配..
答案 0 :(得分:5)
要从输入文件加载变量,您可以使用Jshell script本身。
假设名为some.jsh
的Jshell脚本需要提供两个变量,其中一个是String,另一个是原始整数。
// Random stuff initially
{
System.out.println("One Jshell Script");
}
// Variables to be supplied when jshell loads.
int x = 10;
String y = "Cool";
使用以下命令执行上述脚本:
jshell some.jsh
此后,您可以使用其标识符访问这些变量,如下所示: -
毫无疑问,您可以使用更复杂的数据结构(在您的情况下为Map<String,Object> vars
)以及在脚本中存储信息。
答案 1 :(得分:1)
不,我不相信你可以做你想要的。我不确定您的用例是什么,但也许您可以使用以下代码段来获取想法:
jshell> /vars
| HashMap<String, Object> vars = {bar=2, foo=1}
jshell> try (PrintStream out = new PrintStream(new FileOutputStream("tmp.jsh"))) {
...> vars.forEach((k, v) -> out.printf("Object %s = vars.get(\"%s\")\n", k, k));
...> }
jshell> /open tmp.jsh
jshell> /vars
| HashMap<String, Object> vars = {bar=2, foo=1}
| Object bar = 2
| Object foo = 1
jshell>