[Julia] [ARGS] コマンドライン引数で実行を変えてみた(基礎編)


Juliaの紹介

何のメモ?

Juliaのコードを実行する際のコマンドライン引数をコード内で受け取ったりした時のメモ書き。
基礎編。

どんな時に役立つの?

外部から値を指定してJuliaでの処理結果を動的に変える

コマンドライン引数って?

Windowsだとコマンドプロンプトとか、MacだとTerminalとかのコマンドラインからプログラムを実行する際に、
プログラム実行時に渡してあげるオプションやデータの事。
実行しようとしているプログラムファイル内の関数などに渡す値。

まずPythonで書くと

Pythonだと標準ライブラリの sys で実現できる。
Python環境: version 3.6.5
実行コマンド: python3 args.py hoge 100

args.py
import sys

args = sys.argv
print(args) #['args.py', 'hoge', '100']
print(type(args)) #<class 'list'>

for ind, arg in enumerate(args):
    msg = '第{0}引数-> {1} : {2}'.format(ind + 1, arg, type(arg))
    print(msg)
    #第1引数-> args.py : <class 'str'>
    #第2引数-> hoge : <class 'str'>
    #第3引数-> 100 : <class 'str'>

実行コマンドの python3 から後の実行ファイル名から引数として sys.argv に格納されています。

Juliaでは

Julia環境: version 1.1.0
コマンドライン引数は ARGS に格納されている。
実行コマンド: julia args.jl hoge 100

args.jl
println(ARGS) #["hoge", "100"]
println(typeof(ARGS)) #Array{String,1}

for (ind, arg) in enumerate(ARGS)
    t = typeof(arg)
    msg = "第$(ind)引数-> $arg : $t"
    println(msg)
    #第1引数-> hoge : String
    #第2引数-> 100 : String
end

ここで注意しないといけないことが2つ。

インデックスの開始値が異なる

Pythonだとリストやイテレータの開始インデックスは 0 から始まるが
Juliaでは 1 始まり。
そのため、Pythonで引数のインデックスに +1 しているが、Juliaでは +1 せずともすんでいる。

引数としての解釈位置が異なる

Pythonだと実行コマンドで python3 の次からファイル名も含めて引数と見なされるが
Juliaでは、実行ファイルよりも後ろからが引数としてスクリプトで操作できる。