[Elixir]Pin演算子のちょっとした確認

ElixirにはPin演算子があって、その挙動を少し頭に入れるために簡単なcase文をつくってみました。
Pin演算子は、変数の再代入を防ぐ、という役割を持ちます。

以下は引数として与えられた a が、

  • SamplePin.pin1(a) ではcase文では b=10 が再代入される
  • SamplePin.pin2(a) ではcase文で b=10 が再代入されず、パターンマッチされる

という例です。
Erlangの流れを持ちますが、再代入が許容されるElixirでの再代入という副作用を防ぐ手段ですね。

defmodule SamplePin do

  @moduledoc """
  Checking Pin operation
  """

  @doc """
  Display "when a" always.
  You can learn "a ->" is always true.
  """
  def pin1(a) do
    b = 10
    case b do
      a -> IO.puts "when a. #{a}"
      ^a -> IO.puts "when ^a. #{a}"
      _ -> IO.puts "when _."
    end
  end

  @doc """
  Display "when ^a" only you provide 10 as argument.
  Others, display "when _".
  """
  def pin2(a) do
    b = 10
    case b do
      ^a -> IO.puts "when ^a. #{a}"
      _ -> IO.puts "when _."
    end
  end

end

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中