iT邦幫忙

2022 iThome 鐵人賽

DAY 2
1
Software Development

戀戀 Elixir系列 第 2

二. Pattern Matching

  • 分享至 

  • xImage
  •  

紀錄

pattern_matching = "I am your friend"
"I am your friend"

可以簡單視為解構賦值

"I am your friend" = pattern_matching
"I am your friend"

概念如上述這樣

但一般會像下面這樣使用

{atom, string, charlist, list} = {:i_am_atom, "string", 'charlist', []}
{:i_am_atom, "string", 'charlist', []}

atom === :i_am_atom
true

string === "string"
true

charlist === 'charlist'
true

list === []
true

List 使用

有個觀念要講一下,elixir 的 list,其實是 linked list,所以有特別給一個解構頭與尾的語法
但還是建立在 pattern matching 上做變化
list = ["fisrt", "second", "third"]
["fisrt", "second", "third"]

[head | tail] = list
["fisrt", "second", "third"]

head === "first"
true

tail === ["second", "third"]
true

Function 使用

pattern matching 的性質,可以讓 function 重複命名,依照不同 argument 情況,帶入對應的 function

當參數只有一個的時候

def show_msg(name), do: IO.puts "I'm #{name}. I'm not in a team. I am the team!"

當參數有兩個的時候

def show_msg(name1, name2), do: IO.puts "We are #{name1} and #{name2}. We build the team."

當參數有兩個時候,但有條件

def show_msg(name1, _) when name1 === "Johnson" do
  IO.puts "We build the team! I'm #{name1} and the rest."
end
以上仨 function,可以同時存在於一個 module 裡面
defmodule Meme do
  def show_msg(name), do: IO.puts "I'm #{name}. I'm not in a team. I am the team!"
  def show_msg(name1, name2), do: IO.puts "We are #{name1} and #{name2}. We build the       team."
  def show_msg(name1, _) when name1 === "Johnson" do
    IO.puts "We build the team! I'm #{name1} and the rest."
  end
end

上一篇
ㄧ. 慣例、語法入門
下一篇
三. Anonymous Functions
系列文
戀戀 Elixir30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言