こちらの記事を読んで、IEx.configure(inspect: [limit: :infinity])
の使い方を知ったので、簡単に整理しておきます。
なお、動作は「 Elixir1.9.0(Erlang/OTP 22) 」で確認しています。
最初にまとめ
リストの出力結果を「 無制限 」にしたい場合、以下のようにiex上で設定します。
IEx.configure(inspect: [limit: :infinity])
また、特定の値に設定したい場合には、以下のように指定値を設定します。(例では「9」にしています)
IEx.configure(inspect: [limit: 9])
解説&実施結果
実施結果も含めて、設定内容を確認してみます。
デフォルトではiex上でのリストの出力結果は50件に制限される
iexでは、Enum.map/2
の実行結果などで出力される件数が制限されています。
以下の例では、要素数が100個のリストを作成していますが、表示されている内容は50件までになっています。
iex> 1..100 |> Enum.map(& &1)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, ...]
通常時はこれで問題ないが、大きい値の結果も見たい場合は不便です。
この結果を変更するには、iexでIEx.configure/1
を利用します。
引数に「inspect
」を指定し、さらにinspect
対して「[limit, 件数]
」を指定します。
念のため、IEx.configure/1
のinspect
をヘルプで確認してみます。
h IEx.configure/1
ヘルプを見たところ、デフォルトでは50件で設定されています。
また、全てのエントリを表示する場合は「:infinity
」を設定しろ、と書いてありますね。
## Inspect
A keyword list containing inspect options used by the shell when printing
results of expression evaluation. Default to pretty formatting with a limit of
50 entries.
To show all entries, configure the limit to :infinity:
IEx.configure(inspect: [limit: :infinity])
See Inspect.Opts for the full list of options.
出力する件数を「制限なし」にしてみる
ヘルプの内容に従い、「制限なし」で実施してみます。
結果、1000件のデータはすべて出力されました。
iex> 1..1000 |> Enum.map(& &1)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, ...]
iex> IEx.configure(inspect: [limit: :infinity]) # ここで「制限なし」を指定する。
:ok
iex> 1..1000 |> Enum.map(& &1)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
~(出力の中略)~
982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997,
998, 999, 1000]
出力する件数を指定してみる
今度は、出力件数に任意の値を指定します。
iex> 1..10 |> Enum.map(& &1)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
iex> IEx.configure(inspect: [limit: 3]) # 3件にしてみる
:ok
iex> 1..10 |> Enum.map(& &1)
[1, 2, 3, ...]
iex> IEx.configure(inspect: [limit: 9]) # 9件にしてみる
:ok
iex> 1..10 |> Enum.map(& &1)
[1, 2, 3, 4, 5, 6, 7, 8, 9, ...]
おわりに
知っている人には今更ではあるのですが、これまで自分はずっとiexを抜けてコンソール上で確認していました。自分と同じようにやり方を知らなかった人が知ってもらうきっかけになれば。
ちなみに、今回のやり方で設定した値は、iexを抜けるとリセットされます。
なので、必要に応じて都度実施してください。