5

Elixir の等号の正確な意味がわかりません。明確でないのは、割り当てとパターン マッチング操作が混在しているように見えることです。

iex(1)> x=4
4
iex(2)> y=5
5
iex(3)> 3=y
** (MatchError) no match of right hand side value: 5

iex(3)> y=3
3
iex(4)> y=x
4

Elixir では、等号演算子は = 記号の左側を右側に一致させることを意味することを理解しています。最初の 2 行は理にかなっています。x と y はバインドされていない変数なので、何にでも一致する可能性があります。一致するようにバインドされます。したがって、3行目は理解できます。3 と 5 を一致させることはできません。

私が頭を失い始めたのは、最後の2行が同じエラーを出さずに実行された理由です。等号が代入演算子のみに戻ったようです。

私はこの行動を完全に理解することなく事実として受け入れようとし、言語の学習をさらに進めようとしました. しかし、パターン マッチングは Elixir のコア メカニズムの 1 つであるため、私は常にロックしており、この元の質問に戻らなければならないと感じています。「=」記号で正確に何が起こるか、そしてその論理が何であるかを完全に理解するまで、これ以上先に進むことはしません。

4

3 に答える 3

0

2 つのケース:

1)Left hand sideプレースホルダー/変数です:

  • 正しいものは何でも割り当てられます

例:

x = 5
y = x (y gets value 5)
x = y (x gets value 5)

2)Left hand side

  • 右側の値/変数の値と一致

例:

5 = x (Error: as x is undefined)
x = 5
5 = x (5 matches with 5)
6 = x (Error: 6 is not matches with 5)
于 2016-10-17T16:34:01.097 に答える