この記事は、Elixir Advent Calendar 2023 シリーズ14 の15日目です
【本コラムは、2分で読め、1分で試せます】
piacere です、ご覧いただいてありがとございます
Elixirのタプルって、アレコレ便利ですが、唯一、マップやリストと異なり、「データのサイズ」をカウントする関数が、Tuple
モジュールにありません
また、タプルは Enumerable
プロトコルの実装では無いため、Enum
モジュールも使えません
iex> {1, 2, 3} |> Enum.count
** (Protocol.UndefinedError) protocol Enumerable not implemented for {1, 2, 3} of type Tuple
(elixir 1.16.0) lib/enum.ex:1: Enumerable.impl_for!/1
(elixir 1.16.0) lib/enum.ex:178: Enumerable.count/1
(elixir 1.16.0) lib/enum.ex:702: Enum.count/1
iex:16: (file)
今回、その解決+αをTIPSとしてまとめておきました
タプルのカウント
タプルのカウントは、Kernel
モジュールの下記でできます
iex> {1, 2, 3} |> tuple_size
3
ちなみにマップのカウントは?
実は、マップのためのカウントも、Kernel
モジュールにはあります
iex> %{a: 1, b: 2, c: 3} |> map_size
3
ただ、マップは Enumerable
プロトコルの実装なので、Enum
モジュールでもカウントが取れます
%{a: 1, b: 2, c: 3} |> Enum.count
3