logo

Juliaスプラットオペレーターを通じたオプション引数の渡し方のヒント 📂ジュリア

Juliaスプラットオペレーターを通じたオプション引数の渡し方のヒント

概要

Juliaで頻繁に使われるsplat...の用途について、オプショナル引数を伝える方法を説明する。基本的に、どんなオプションにどんな引数を入れるかを事前に名前付きタプルの形で決めた後、そのタプルにsplatオペレーターを適用する方式で使う。

コード

複数の関数に伝える

args1 = (; dims = 1)

上の名前付きタプルargs1dimsというオプショナル引数がある全ての関数に共通して使うことができる。次の例で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)

上の名前付きタプルargs2dimsに加えて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