Pri*_*rgo 2 command-line arguments vector julia
有没有办法在 Julia 中将向量变量作为命令行参数传递?就我而言,我有两个参数:一个整数和一个整数向量。虽然我可以轻松解析第一个参数,但我没有找到任何令人愉快的方式来解析向量。现在我只是将向量设置为 ,v = parse.(Int, ARGS[2:end])但由于向量的项被视为参数,因此非常令人困惑。是否有一些特殊的语法来处理这种情况?
我认为您当前的解决方案很好,并且符合许多命令行工具的处理方式。
如果您真的想将整个数组作为一个命令行参数传递,则必须:
这两个步骤因您要使用的语法而异。
两个例子:
示例 1:类似 Julia 的语法
shell$ julia myscript.jl 42 "[1,2,3]"
i = 42
v = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我们可以利用 Julia 解析器能够解析这样的数组(但我们要小心不要评估用户输入的任意 julia 代码):
# First argument: an integer
i = parse(Int, ARGS[1])
# Second argument, a Vector{Int} in Julia-like format: "[1, 2, 3]"
v = let expr = Meta.parse(ARGS[2])
@assert expr.head == :vect
Int.(expr.args)
end
@show i
@show v
Run Code Online (Sandbox Code Playgroud)
示例 2:空格或逗号分隔的值
# First argument: an integer
i = parse(Int, ARGS[1])
# Second argument, a Vector{Int} in Julia-like format: "[1, 2, 3]"
v = let expr = Meta.parse(ARGS[2])
@assert expr.head == :vect
Int.(expr.args)
end
@show i
@show v
Run Code Online (Sandbox Code Playgroud)
在这里,我们可以DelimitedFiles用来解析数组(将分隔符更改为您喜欢的任何内容):
# First argument: an integer
i = parse(Int, ARGS[1])
# Second argument, a Vector{Int} as comma-separated values
using DelimitedFiles
v = reshape(readdlm(IOBuffer(ARGS[2]), ',', Int), :)
# set the delimiter here ^
@show i
@show v
Run Code Online (Sandbox Code Playgroud)