ARGS关键字允许在从命令行调用Julia脚本时指定参数(请参阅Access command line arguments in Julia)。这样,命令行调用中的每个空格都标记了ARGS数组中的单独元素。如果我希望其中一个元素本身是一个任意长度的数组怎么办?只是连接ARGS的单独元素似乎不合适。
答案 0 :(得分:4)
这里有两把钥匙。
eval(parse( ))
将您传递的字符串转换为您想要的对象类型。以下是一个示例脚本:
println(string("First Arg Passed to Script: ", ARGS[1]))
println(string("typeof(ARGS[1]) = ", typeof(ARGS[2])))
println(string("Second Arg Passed to Script: ", ARGS[2]))
println(string("typeof(ARGS[2]) = ", typeof(ARGS[2])))
MyArray = eval(parse(ARGS[1]))
println(string("typeof(MyArray) = ", typeof(MyArray)))
println(string("length(MyArray) = ", length(MyArray)))
println(string("MyArray = ", MyArray))
使用以下终端命令运行此命令:
julia /Users/aireties/Desktop/ArrayTest.jl "[2, 4, 5]" 23
产生输出:
First Arg Passed to Script: [2, 4, 5]
typeof(ARGS[1]) = UTF8String
Second Arg Passed to Script: 23
typeof(ARGS[2]) = UTF8String
typeof(MyArray) = Array{Int64,1}
length(MyArray) = 3
MyArray = [2,4,5]
注意:但是,如果我希望在我从命令行传递的数组中包含字符串,我需要使用第二组单引号,用双引号括起数组朱莉娅用来表示字符串:
julia /Users/aireties/Desktop/ArrayTest.jl '["a", "b", 5]' 23
致电:
julia /Users/aireties/Desktop/ArrayTest.jl "["a", "b", 5]" 23
会产生错误。
答案 1 :(得分:3)
@aireties提供的答案很好。但是,我认为如果输入数组很大,我提供的另一个选项效果特别好。只需将输入数组存储在已知位置的文本文件中,例如/someAbsolutePath/myArray.csv
然后在调用julia
时将文本文件的位置作为参数传入。然后,在脚本的前几行中,拨打readcsv
并瞧。
当你想从命令行调用一个需要大量输入的例程时,对于像Julia这样的许多语言(例如Python / R / Matlab)来说,这实际上是一种相当普遍的策略。我在生产环境中看到了编译的Matlab例程,它将自定义文本文件的位置作为命令行中的单个输入参数。然后,Matlab例程的第一部分将从自定义文本文件中读取一大堆输入参数(如果文本文件看起来不像预期那么会抛出错误)。在某些情况下,文本文件将包含许多包含其他相关输入的其他文本文件的位置!