gpt4 book ai didi

case - Elixir:在 case 语句中使用变量

转载 作者:行者123 更新时间:2023-12-01 08:51:48 28 4
gpt4 key购买 nike

我有这个 case 语句,它给出了一个错误“变量 constant1 未使用”。它似乎忽略了变量并返回了第一行,因此变量显然没有范围。如果我用数字 1 替换常量,那么它就可以工作。在 Elixir 中这样做的最佳方法是什么?

defmodule Main 
do
def constant1, do: 1
def constant2, do: 1
def constant3, do: 1

x = 1
y = 0
z = 0

{a, b, c, d} =
case {x, y, z} do
{constant1, constant2, constant3} -> {1, 2, 3, 4}
{constant1, constant2, _} -> {5, 6, 7, 8}
{constant1, _, _} -> {9, 10, 11, 12}
{_, _, _} -> {13, 14, 15, 16}
end

IO.inspect {a, b, c, d}
end

这是输出:
warning: variable constant1 is unused
Untitled 9:15

{1, 2, 3, 4}

将常量更改为变量也不起作用。

最佳答案

您已定义 constant1作为一个函数。当你尝试在模式匹配中使用它时,Elixir 期望变量在那里并且你得到了一个错误。不能模式匹配功能。

您想要的可能是:

defmodule Main do
constant1 = 1
constant2 = 1
constant3 = 1

x = 1
y = 0
z = 0

{a, b, c, d} =
case {x, y, z} do
{^constant1, ^constant2, ^constant3} -> {1, 2, 3, 4}
{^constant1, ^constant2, _} -> {5, 6, 7, 8}
{^constant1, _, _} -> {9, 10, 11, 12}
{_, _, _} -> {13, 14, 15, 16}
end

IO.inspect {a, b, c, d}
end
#⇒ { 9, 10, 11, 12 }

另外,请记住要模式匹配到已经定义的值,应该使用 the pin operator ^ 在匹配器前面,否则代码
a = 42
case x do
a -> ...
end

将覆盖 a 的值,将其设置为 x 的值(在 case 块的范围内,在 case 之外的将保留 42 。)与 ^ , 下面的代码将匹配当且仅 x == 42 :
a = 42
case x do
^a -> ...
end

关于case - Elixir:在 case 语句中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39589589/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com