我在文件中有一个Julia函数。让我们说它是下面的。现在我想将参数传递给这个函数。我试着做了
julia filename.jl randmatstat(5)
但这会产生一个错误('令牌是意料之外的。不确定解决方案是什么。如果有一个主要功能/如何编写一个完整的解决方案,我也有点不知所措使用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
答案 0 :(得分:5)
您可以尝试这样运行:
julia -L filename.jl -E 'randmatstat(5)'
答案 1 :(得分:3)
将以下内容添加到您的Julia文件中:
### original file
function randmatstat...
...
end
### new stuff
if length(ARGS)>0
ret = eval(parse(join(ARGS," ")))
end
println(ret)
现在,你可以运行:
julia filename.jl "randmatstat(5)"
最初的尝试。请注意添加的附加引号以确保括号不会弄乱命令。
说明:Julia定义了ARGS
变量,用于保存运行该文件的命令的参数。由于Julia是一个解释器,我们可以join
将这些参数转换为字符串,将其解析为Julia代码,运行它并打印结果(代码对应于此描述)。
答案 2 :(得分:2)
朱莉娅没有这样的“切入点”。
当你从终端呼叫julia myscript.jl
时,你基本上要求julia执行脚本并退出。因此,它需要是一个脚本。如果您脚本中的所有内容都是函数定义,那么除非您稍后从脚本中调用该函数,否则它将无法执行任何操作。
至于参数,如果你调用julia myscript.jl 1 2 3 4
,所有剩余的参数(即在这种情况下,1,2,3和4)将成为一个特殊名称为ARGS
的字符串数组。您可以使用此特殊变量来访问输入参数。
e.g。如果你有一个julia脚本简单地说:
# in julia mytest.jl
show(ARGS)
然后从linux终端调用它将得到这个结果:
<bashprompt> $ julia mytest.jl 1 two "three and four"
UTF8String["1","two","three and four"]
编辑:所以,根据我对你的程序的理解,你可能想要做这样的事情(注意:在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")
然后从你的linux终端调用它,如下所示:
julia myscript.jl 5