以非交互方式将函数参数传递给Julia

Cod*_*123 8 julia

我在文件中有一个Julia函数.让我们说它是下面的.现在我想将参数传递给这个函数.我试过了

julia filename.jl randmatstat(5) 
Run Code Online (Sandbox Code Playgroud)

但是这会给出一个'('令牌是意外的错误.不确定解决方案是什么.如果有一个主要功能/如何使用Julia编写完整的解决方案,我也有点不知所措.例如,什​​么是起点/ Julia计划的切入点?

function randmatstat(t)
    n = 5
    v = zeros(t)
    w = zeros(t)
    for i = 1:t
        a = randn(n,n)
        b = randn(n,n)
        c = randn(n,n)
        d = randn(n,n)
        P = [a b c d]
        Q = [a b; c d]
        v[i] = trace((P.'*P)^4)
        w[i] = trace((Q.'*Q)^4)
    end
    std(v)/mean(v), std(w)/mean(w)
end
Run Code Online (Sandbox Code Playgroud)

sus*_*ant 5

您可以尝试这样运行:

julia -L filename.jl -E 'randmatstat(5)'


Tas*_*nou 5

朱莉娅没有这样的“入口点”。当您julia myscript.jl从终端调用时,您实际上是在要求 julia 执行脚本并退出。因此,它需要是一个脚本。如果您的脚本中只有一个函数定义,那么除非您稍后从脚本中调用该函数,否则它不会做太多事情。

至于参数,如果您调用julia myscript.jl 1 2 3 4,则所有剩余的参数(即在本例中为 1、2、3 和 4)将成为具有特殊名称的字符串数组ARGS。您可以使用此特殊变量来访问输入参数。

例如,如果您有一个 julia 脚本,它只是说:

# in julia mytest.jl
show(ARGS)
Run Code Online (Sandbox Code Playgroud)

然后从 linux 终端调用它会得到这个结果:

<bashprompt> $ julia mytest.jl 1 two "three and four"
UTF8String["1","two","three and four"]
Run Code Online (Sandbox Code Playgroud)

编辑:所以,根据我从你的程序中了解到的,你可能想要做这样的事情(注意:在 julia 中,函数需要在调用之前定义)。

# in file myscript.jl
function randmatstat(t)
    n = 5
    v = zeros(t)
    w = zeros(t)
    for i = 1:t
        a = randn(n,n)
        b = randn(n,n)
        c = randn(n,n)
        d = randn(n,n)
        P = [a b c d]
        Q = [a b; c d]
        v[i] = trace((P.'*P)^4)
        w[i] = trace((Q.'*Q)^4)
    end
    std(v)/mean(v), std(w)/mean(w)
end

t = parse(Int64, ARGS[1])
(a,b) = randmatstat(t)
print("a is $a, and b is $b\n")
Run Code Online (Sandbox Code Playgroud)

然后从您的 linux 终端调用它,如下所示:

julia myscript.jl 5
Run Code Online (Sandbox Code Playgroud)