Chr*_*ian 2 elixir conditional-statements
有没有办法在cond类似于以下内容的块中的条件中具有多个绑定表达式:
cond do
a = 1; a * 2 == 2 -> "Yes"
end
Run Code Online (Sandbox Code Playgroud)
? 我想如果 Elixir 中有像 Haskell 中的“let in”绑定表达式这样的东西是可能的:
let a = 1 in a * 2
Run Code Online (Sandbox Code Playgroud)
更新
在下面的情况下,我想将String.replace表达式绑定到一个变量以提高可读性(我当然可以在这之外这样做,cond因为显而易见的原因这不是最佳解决方案)。条件检查是否input仅是大写字母(非字母字符除外)并取自 exercism.io 挑战:
String.upcase(String.replace(input, ~r/[^A-Za-z]/, "")) == String.replace(input, ~r/[^A-Za-z]/, "") and String.length(String.replace(input, ~r/[^A-Za-z]/, "")) > 0 -> "Whoa, chill out!"
Run Code Online (Sandbox Code Playgroud)
直接回答第一个问题,答案是肯定的。您的原始代码:
cond do
a = 1; a * 2 == 2 -> "Yes"
end
Run Code Online (Sandbox Code Playgroud)
被解析为:
cond do
a = 1
a * 2 == 2 -> "Yes"
end
Run Code Online (Sandbox Code Playgroud)
因为;意味着整个表达式的结束。如果要包含多个表达式,请使用括号:
cond do
(a = 1; a * 2 == 2) -> "Yes"
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |