[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
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s