Elixir:嵌套的 If 语句
Elixir: Nested If Statements
我有一段简单的代码,在大多数语言中都非常简单。我真的很难看到如何做到这一点。我如何将其转换为 Elixir 而不会收到可怕的变量不安全警告?
dc = 1
sd = 5
sdi = 6
calc = 1
bc = 1
dd = 10
if (dc == 1)
csd = sd
bd = sd
p = sdi
if (calc == 1 && bc != 1) do
count = 1
else
count = 20
end
else
csd = dd
bd = dd
p = dd
count = 1
end
您可以使用元组和模式匹配:
dc = 1
sd = 5
sdi = 6
calc = 1
bc = 1
dd = 10
{csd, bd, p, count} = if dc == 1 do
{sd, sd, sdi, if(calc == 1 && bc != 1, do: 1, else: 20)}
else
{dd, dd, dd, 1}
end
IO.inspect {csd, bd, p, count}
输出:
{5, 5, 6, 20}
如果 if
变得太长而无法与其他变量放在同一行中,我也会将其提取到一个单独的变量中:
new_count = if(calc == 1 && bc != 1, do: 1, else: 20)
{sd, sd, sdi, new_count}
@Dogbert 的回答也完全有效,我会一直使用模式匹配:
{csd, bd, p, count} = case {dc, calc, bc} do
{1, 1, 1} -> {sd, sd, sdi, 20}
{1, 1, _} -> {sd, sd, sdi, 1}
{1, _, _} -> {sd, sd, sdi, 20}
{_, _, _} -> {dd, dd, dd, 1}
end
在我看来,它更直接(而且我讨厌在函数式语言中使用 if
。)
我有一段简单的代码,在大多数语言中都非常简单。我真的很难看到如何做到这一点。我如何将其转换为 Elixir 而不会收到可怕的变量不安全警告?
dc = 1
sd = 5
sdi = 6
calc = 1
bc = 1
dd = 10
if (dc == 1)
csd = sd
bd = sd
p = sdi
if (calc == 1 && bc != 1) do
count = 1
else
count = 20
end
else
csd = dd
bd = dd
p = dd
count = 1
end
您可以使用元组和模式匹配:
dc = 1
sd = 5
sdi = 6
calc = 1
bc = 1
dd = 10
{csd, bd, p, count} = if dc == 1 do
{sd, sd, sdi, if(calc == 1 && bc != 1, do: 1, else: 20)}
else
{dd, dd, dd, 1}
end
IO.inspect {csd, bd, p, count}
输出:
{5, 5, 6, 20}
如果 if
变得太长而无法与其他变量放在同一行中,我也会将其提取到一个单独的变量中:
new_count = if(calc == 1 && bc != 1, do: 1, else: 20)
{sd, sd, sdi, new_count}
@Dogbert 的回答也完全有效,我会一直使用模式匹配:
{csd, bd, p, count} = case {dc, calc, bc} do
{1, 1, 1} -> {sd, sd, sdi, 20}
{1, 1, _} -> {sd, sd, sdi, 1}
{1, _, _} -> {sd, sd, sdi, 20}
{_, _, _} -> {dd, dd, dd, 1}
end
在我看来,它更直接(而且我讨厌在函数式语言中使用 if
。)