Juliaスプラットオペレーターを通じたオプション引数の渡し方のヒント
概要
Juliaで頻繁に使われるsplatの...
の用途について、オプショナル引数を伝える方法を説明する。基本的に、どんなオプションにどんな引数を入れるかを事前に名前付きタプルの形で決めた後、そのタプルにsplatオペレーターを適用する方式で使う。
コード
複数の関数に伝える
args1 = (; dims = 1)
上の名前付きタプルargs1
はdims
というオプショナル引数がある全ての関数に共通して使うことができる。次の例でsum()
とminimum()
は全く異なる関数だが、共にdims
を持っているため、関数の種類に関係なく適用された。
julia> sum(rand(100,100); args1...)
1×100 Matrix{Float64}:
47.0704 45.7637 44.4513 48.2325 50.5745 51.9176 … 49.9548 47.6825 50.7284 50.0861 50.0168 50.5116
julia> minimum(rand(100,100); args1...)
1×100 Matrix{Float64}:
0.00702003 0.0163299 0.00665818 0.0174564 0.00589048 … 0.002967 0.00460205 0.0116248 0.0114521 0.0698425
複数の引数を伝える
args2 = (; dims = 2, rev = true)
上の名前付きタプルargs2
はdims
に加えてrev
というオプショナル引数を含んでいる。次の例でsort()
関数は入力データに関係なく二つのオプションをよく反映して計算結果を返した。
julia> sort(rand(0:9, 3,3); args2...)
3×3 Matrix{Int64}:
9 4 4
6 5 2
8 0 0
julia> sort(rand(3,3); args2...)
3×3 Matrix{Float64}:
0.438682 0.211154 0.108741
0.72113 0.445214 0.00910109
0.971441 0.666732 0.0227372
全体コード
args1 = (; dims = 1)
sum(rand(100,100); args1...)
minimum(rand(100,100); args1...)
args2 = (; dims = 2, rev = true)
sort(rand(0:9, 3,3); args2...)
sort(rand(3,3); args2...)
環境
- OS: Windows
- julia: v1.8.3