官术网_书友最值得收藏!

  • Mastering Elixir
  • André Albuquerque Daniel Caixinha
  • 313字
  • 2021-08-05 10:42:47

Pattern matching on lists

Matching on lists is akin to matching on tuples. Here's a simple example:

iex> [first, second, third] = ["α", "β", "γ"]
["α", "β", "γ"]
iex> first
"α"
iex> second
"β"
iex> third
"γ"

There's nothing new here. What if, for instance, we don't care about the second element of the list? That's where the  _ (underscore) anonymous variable is convenient:

iex> [first, _, third] = ["δ", "ε", "ζ"]
["δ", "ε", "ζ"]
iex> first
"δ"
iex> third
"ζ"

We're again matching a list with three elements, but now bind the second element to the _ variable, which means that we accept anything in that position and we won't use its value.

 

 


The _ variable can never be read from if you do so, you will get a  CompileError:

iex> _
** (CompileError) iex:83: unbound variable _

This way, Elixir is protecting you from inadvertently reading from this variable, which could easily cause unexpected behaviors in your application.

As we've mentioned on the data types section, you can use the hd and tl functions from the Kernel module to get the head and the tail of a list. You can do the same with pattern matching:

iex> [first | rest_of_list] = ["α", "β", "γ"]
["α", "β", "γ"]
iex> first
"α"
iex> rest_of_list
["β", "γ"]

While in this contrived example, this approach yields no benefit, this technique is a fundamental piece to operate on a list using recursion. We'll look at this in greater detail in the Working with collections section.

主站蜘蛛池模板: 永清县| 华坪县| 穆棱市| 长乐市| 五河县| 祁东县| 绥芬河市| 肃北| 宝兴县| 常山县| 伊宁市| 蓝山县| 娱乐| 永福县| 阿尔山市| 贵州省| 泗洪县| 白银市| 山西省| 建始县| 韩城市| 杨浦区| 阳高县| 宝山区| 抚远县| 福安市| 巴东县| 民权县| 丘北县| 甘孜县| 正宁县| 彰化市| 万全县| 忻州市| 南投县| 吉木萨尔县| 寿光市| 东丽区| 青河县| 南华县| 邳州市|