为什么不能从Java执行包含String []的Julia脚本

时间:2015-12-11 17:40:18

标签: java arrays string julia

public class ScriptProcess {

    private String[] command;

    public ScriptProcess(String[] c) {
        this.command = c;
    }

    public void exec() {
        try {
            Process p = Runtime.getRuntime().exec(this.command);
            BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
            StringBuffer stringBuffer = new StringBuffer();
            String line = null;
            while((line = in.readLine()) != null){          
                stringBuffer.append(line + " --- ");
            }
            System.out.println(stringBuffer.toString());
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

我可以用这个Java类执行Julia脚本。

例如,这是一个julia脚本:

#main.jl
msgTest = Int64[]
push!(msgTest, 1)
push!(msgTest, 2)    
println(msgTest)

然后,我可以初始化ScriptProcess来执行上面的julia脚本:

String[] command = {"C:\\Julia\\bin\\julia.exe", "C:\\doc\\Julia\\main.jl"};
ScriptProcess sp = new ScriptProcess(command);
sp.exec();

一切都很好,我可以在日食的控制台上得到结果:[1,2]

但是,如果我将julia脚本的Int64更改为String,如下所示:

#main.jl
msgTest = String[]
push!(msgTest, "aaa")
push!(msgTest, "bbb")    
println(msgTest)

我运行相同的java项目,我什么也得不到。

但是,我可以使用命令提示符运行julia脚本:

C:\> C:\Julia\bin\julia.exe C:\doc\Julia\main.jl

我可以得到结果:AbstractString["aaa","bbb"]

2 个答案:

答案 0 :(得分:2)

如果使用String,新版Julia会生成警告。 String已更改为AbstractString

如果我们在Julia或Julia的某个IDE中使用String,除了警告之外,事情仍然会很好。但是,如果我们想用另一个语言项目执行julia脚本,我们就不能这样做了。

答案 1 :(得分:0)

由于不能直接回答问题,因此示例代码是现有库(即JuliaCaller)下的基本逻辑,该库随开源许可证一起分发。您可以将Java对象传递给Julia,在Julia一侧进行计算,然后将结果返回Java。这里是链接:JuliaCaller GitHub

这是一个示例:

List<Double> values = List.of(1.0, 2.0, 10.0, -4.0);
caller.addJuliaObject(JuliaObject.createArrayVariable("a", values));
caller.Execute("using Statistics");
caller.Execute("ave = mean(a)");
double result = caller.getDouble("ave");
assertEquals(2.25, result);