[Elixir]Keywordの中身はTupleのList

Elixirに置いて、Keyword listはTupleで表現される。

[{a, b}, {c, d}]

なので、

@hw %{
  1 => "hello",
  2 => "world"
}

hw |> Enum.filter(fn {key, _} -> key == 1 end) |> Keyword.values

のようなパイプを書いた時、取得されるのは ["hello"] になる。

ここで、Elixir v1.2.3 の Keyword.valuesの中身を覗いてみると、以下のようにmapを適用した中でTupleからちょうどvalueを取得してListを作って返している。

  @spec values(t) :: [value]
  def values(keywords) when is_list(keywords) do
    :lists.map(fn {_, v} -> v end, keywords)
  end

当初、

[hello: "world", inu: "neko"] # Elixir

しか Keyword 系は使えないと思っていたけれど、Erlangレベルでは

[{hello, "world"}, {inu, "neko"}] # Erlang

なので、Keyword listとみなしてKeyword操作ができるのですね。学びだ。

蛇足だけれど、 Enum.any?/2 と言う、処理の途中で要素が見つかったらtrueを返す用途で使うfunctionも教えてもらった。なるほど。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中