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

環境

julia> versioninfo()
Julia Version 1.0.0
Commit 5d4eaca0c9 (2018-08-08 20:58 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Core(TM) i5-4460T CPU @ 1.90GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.0 (ORCJIT, haswell)
Environment:
  JULIA_SHELL = /bin/bash
  JULIA_EDITOR = nvim

型そのものを関数に渡す

整数型の変数とかではなく 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 で検索するとノイズが多すぎてあるのかどうかわからない