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

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.

主站蜘蛛池模板: 大理市| 福清市| 阜宁县| 晋中市| 柞水县| 资中县| 永州市| 启东市| 六安市| 陆良县| 稷山县| 沭阳县| 金华市| 高要市| 抚松县| 揭西县| 盘山县| 广西| 涞源县| 永济市| 洛宁县| 盐山县| 常熟市| 兖州市| 兰西县| 科技| 柘荣县| 牟定县| 阿克陶县| 秭归县| 东乡族自治县| 库尔勒市| 定陶县| 若尔盖县| 安西县| 札达县| 锦州市| 达拉特旗| 岐山县| 丹阳市| 宣恩县|