Не могу получить первый пример для работы в руководстве кейса Эликсира-Ланга - PullRequest
0 голосов
/ 14 января 2020

Я изучаю эликсир и очень плохо знаком с ним. Я пытаюсь следовать следующему примеру на https://elixir-lang.org/getting-started/case-cond-and-if.html для заявлений. Эта страница имеет следующее:

iex> case {1, 2, 3} do
...>   {4, 5, 6} ->
...>     "This clause won't match"
...>   {1, x, 3} ->
...>     "This clause will match and bind x to 2 in this clause"
...>   _ ->
...>     "This clause would match any value"
...> end
"This clause will match and bind x to 2 in this clause"

Когда я запускаю этот пример дословно, я вижу следующий вывод:

iex(5)> case {1, 2, 3} do
...(5)>   {4, 5, 6} ->
...(5)>     "This clause won't match"
...(5)>   {1, x, 3} ->
...(5)>     "This clause will match and bind x to 2 in this clause"
...(5)>   _ ->
...(5)>     "This clause would match any value"
...(5)> end
warning: variable "x" is unused (if the variable is not meant to be used, prefix it with an underscore)
  iex:8

"This clause will match and bind x to 2 in this clause"
iex(6)> x
** (CompileError) iex:6: undefined function x/0

iex(6)> 

Что я пропускаю? Я ожидаю, что смогу получить значение x как 2.

Если уместно, вот версия, которую я использую: IEx 1.9.4 (compiled with Erlang/OTP 22)

1 Ответ

1 голос
/ 14 января 2020

Если вы хотите, чтобы x выходил за рамки контекста, вы можете просто вернуть его:

{x, message} = case {1, 2, 3} do
  {4, 5, 6} -> "This clause won't match"
  {1, x, 3} -> {x, "This clause will match and bind x to 2 in this clause"}
  _ -> "This clause would match any value"
end

iex(5)> x
2
...