Masataka Miki's Blog

すみません、わかりません。もっと勉強して改善します。

Elixir Enum.filter の結果が変

      2019/02/25

Elixirのお勉強を始めました。
初日に早速、???に遭遇。

iexで、

[323, 999, 54] |> Enum.filter(fn(n) -> n > 323 end)
[999]

となるのに、

[323, 999, 54] |> Enum.filter(fn(n) -> n < 323 end)
'6'

になった。[54]以外の答えをまったく想定していなかったので戸惑った!

ちょっと調べたところ、文字のコードポイントとして取り扱われて、その文字列を出力しているようなことが分かった。
(いや、よくわかっていないので、よく理解できたら、後日、追記します。とりあえず、そういう仕様と思うことにしておきます)

[54] == '6'
true

?で文字のコードポイントが確認できる

?6
54

ちなみに、環境は、
Erlang (SMP,ASYNC_THREADS) (BEAM) emulator version 10.0.1
Elixir 1.7.3 (compiled with Erlang/OTP 19)
OS:Windows 10 Pro.

 

追記:

『プログラミング Elixir』の第7章 リストと再帰を読んだら解決。

やはりこの本は必須!

 - 技術