LoginSignup
3
3

More than 5 years have passed since last update.

Elixirの Enum.map の使い方の覚え書き

Last updated at Posted at 2015-11-10

Elixirのコードサンプル等に良く出てくるのだが、いまひとつ理解できないので覚え書き。

Enum.map(数値, fn(引数)-> IO.puts 引数 end)
数値を引数に実行するとどうやら、引数は配列でなければならないようだ。

iex(1)> Enum.map(2, fn(x)-> IO.puts x end)
** (Protocol.UndefinedError) protocol Enumerable not implemented for 2
    (elixir) lib/enum.ex:1: Enumerable.impl_for!/1
    (elixir) lib/enum.ex:112: Enumerable.reduce/3
    (elixir) lib/enum.ex:1400: Enum.reduce/3
    (elixir) lib/enum.ex:1047: Enum.map/2

Enum.map(文字列, fn(引数)-> IO.puts 引数 end)

実行するまでもないが・・・
エラー。

iex(1)> Enum.map("Hello",fn(x)-> IO.puts x end)                  
** (Protocol.UndefinedError) protocol Enumerable not implemented for "Hello" 
    (elixir) lib/enum.ex:1: Enumerable.impl_for!/1
    (elixir) lib/enum.ex:112: Enumerable.reduce/3
    (elixir) lib/enum.ex:1400: Enum.reduce/3
    (elixir) lib/enum.ex:1047: Enum.map/2

Enum.map(配列, fn(引数)-> IO.puts 引数 end) で実行するとOK。

iex(1)> Enum.map([2], fn(x)-> IO.puts x end)
2
[:ok]

当然以下は想定通り。

iex(2)> Enum.map([1,2,3,4,5], fn(x)-> IO.puts x end)
1
2
3
4
5
[:ok, :ok, :ok, :ok, :ok]

Enum.map(文字列の配列, fn(引数)-> IO.puts 引数 end)
次に文字列配列。当然実行可能。

iex(3)> Enum.map(["Apple","Banana","Orange"],fn(x)-> IO.puts x end)
Apple
Banana
Orange
[:ok, :ok, :ok]

Enum.map(マップ, fn(引数)-> IO.puts 引数 end)
無名関数の引数の形式を変えて実行すると想定通りの結果。

iex(4)> Enum.map(%{a: "Apple", b: "Banana", c: "Orange"}, fn{key, val} -> IO.puts val end)
Apple
Banana
Orange
[:ok, :ok, :ok]

まだまだ、直感でプログラムするには、手を動かして覚えることが多いです。関数型プログラミング。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3