この記事は、Elixir Advent Calendar 2023 シリーズ14 の19日目です
【本コラムは、2分で読め、2分で試せます】
piacere です、ご覧いただいてありがとございます
Elixirの幾つかの関数って、Erlangモジュール関数にインライン展開されるってご存じですか?
Kernel
モジュールの関数(演算子含む)
Kernel
モジュール関数の幾つかは、Erlang関数にインライン展開されるのですが、これは &
とアリティを付けることで確認できます
iex> &Kernel.hd/1
&:erlang.hd/1
iex> &Kernel.tl/1
&:erlang.tl/1
iex> &Kernel.length/1
&:erlang.length/1
演算子も、Erlang関数にインライン展開されます
iex> &+/1
&:erlang.+/1
iex> &*/2
&:erlang.*/2
別コラムで紹介したサイズ取得や型チェックも、Erlang関数にインライン展開されます
iex> &byte_size/1
&:erlang.byte_size/1
iex> &bit_size/1
&:erlang.bit_size/1
iex> &map_size/1
&:erlang.byte_size/1
iex> &tuple_size/1
&:erlang.bit_size/1
iex> &is_binary/1
&:erlang.is_binary/1
iex> &is_list/1
&:erlang.is_list/1
iex> &is_tuple/1
&:erlang.is_tuple/1
iex> &is_number/1
&:erlang.is_number/1
Kernel
モジュール以外にもあります
Atom
モジュールや String
モジュール、List
モジュール、Map
モジュール、Tuple
モジュールなどの型変換も、Erlang関数へのインライン展開で処理されているようです
iex> &Atom.to_string/1
&:erlang.atom_to_binary/1
iex> &String.to_integer/1
&:erlang.binary_to_integer/1
iex> &String.to_float/1
&:erlang.binary_to_float/1
iex> &List.to_float/1
&:erlang.list_to_float/1
iex> &Map.to_list/1
&:maps.to_list/1
iex> &Tuple.to_list/1
&:erlang.tuple_to_list/1
一方、Enum
モジュールや Range
モジュール、Date
モジュール、DateTime
モジュールは違うようです
iex> &Enum.to_float/1
&Enum.to_float/1
iex> &Range.to_list/1
&Range.to_list/1
iex> &Date.to_string/1
&Date.to_string/1
iex> &DateTime.to_string/1
&DateTime.to_string/1
実は…
下記にドキュメント化されています