Julia - 関数に型そのものを渡す

環境

  • OS: ArchLinux
  • Julia 1.0.2

型そのものを関数に渡す

整数型の変数とかではなく Int とか型そのものを引数に取る関数を作りたい場合、

hoge(::Type{Int}) = println("Hello World!")

の様に引数にとりたい型を Type でくるんでやればいいらしい。

julia> hoge(::Type{Int}) = println("Hello World!")
hoge (generic function with 1 method)

julia> hoge(Int)
Hello World!

julia> hoge(Float64)
ERROR: MethodError: no method matching hoge(::Type{Float64})
Closest candidates are:
  hoge(::Type{Int64}) at REPL[1]:1
Stacktrace:
 [1] top-level scope at none:0

Julia を使い始めて以来、pretty-print (Base.show(io::IO, ::MIME"text/plain", z::Polar{T}) とか)に出てくるMIMEのところは仮引数がないけど何を渡しているんだと思ってきたのですが、型を渡しているのだと考えると色々と合点がいく気がします。

Julia のドキュメント中に型そのものを渡す方法の記述が見つからない*1ので保証はしませんが。randソースコードを見ると合ってる気がするようなしないような。

参考

*1:Type で検索するとノイズが多すぎてあるのかどうかわからない