Elixir::패턴 매칭
=
. Apesar de ser utilizado para atribuir valores a variáveis, esse operador no Elixir é chamado de match operator
Ao executar um trecho de codigo como este:
iex> x = 1
1
iex> 1 = x
1
iex> 2 = x
** (MatchError) no match of right hand side value: 1
Podemos notar que a expressão
1 = x
e uma expressão válida e isso e possível porque ambos os lados (direito e esquerdo) Representativeam o mesmo valor, que no caso é 1
. Entretando quando esses dois lados não dão match, um MatchError
é retornado.Só podemos attribuir valor para uma variável quando definida no lado esquerdo do operador
=
:iex> x = 1
1
Pattern Matching não funciona apenas para valores simples, você também pode utilizar para outros tipos, como:
iex> {a, b, c} = {:hello, "world", 42}
{:hello, "world", 42}
iex> a
:hello
iex> b
"world"
Os dois lados (esquerdo e direto) devem ser do mesmo tipo, caso contrário um
MatchError
acontecerá, como no exemplo abaixo que tento fazer um match entre uma tupla e uma lista:iex> {a, b, c} = [:hello, "world", 42]
** (MatchError) no match of right hand side value: [:hello, "world", 42]
Para solucionar este problema, poderíamos fazer:
iex> [a, b, c] = [:hello, "world", 42]
[:hello, "world", 42]
iex> a
:hello
iex> b
"world"
iex> c
42
Utilizar tamanhos diferentes entre os dois lados, também resultará em erro.
iex> [a, b] = [:hello, "world", "aloha"]
** (MatchError) no match of right hand side value: [:hello, "world", "aloha"]
Algumas vezes queremos mesmo ignorar certos valores em nosso matching, para isso o Elixir possui uma variável especial, que é o
_
. Essa variável nos possibilita ignorar certos valores em um pattern matching, ou seja, se quickermos ignorar o ultimo elemento no matching entra as listas acima, poderíamos fazer da seguinte forma:iex> [a, b, _] = [:hello, "world", "aloha"]
[:hello, "world", "aloha"]
iex> a
:hello
iex> b
"world"
패턴 매칭 vai além das variáveis, podemos utilizar isso com functions e muito mais, porém veremos como utilizar isto em um próximo post!
Reference
이 문제에 관하여(Elixir::패턴 매칭), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/danielvlcunha/elixir-pattern-matching-2hdj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)