我是elixir的新手 尝试用基础学习 但如果else语句显示出一些异常行为
age = IO.gets ("age : ") |> String.trim
agea=Integer.parse(age)
if agea > 10 do
IO.puts "greater than 10 "
else
IO.puts "les than 10 "
end
使用键盘将年龄设置为5 结果是“大于10”
问题是什么 我怎么能修好它?
我该怎么做 如果类似下面的代码(以下示例不在elixir中) 例如:
a=5
if(a<3){
printf("less than 3")
else if (a>=3 && a<10){
printf ("something ")
else{
printf("something")
}
答案 0 :(得分:4)
Integer.parse/1
返回一个整数元组,并在成功时返回剩余字符串:
iex(1)> Integer.parse("123")
{123, ""}
并且在Elixir中,每个元组都比每个整数都要大:
iex(2)> {} > 0
true
如果要将String转换为Integer并在无效整数上引发异常,则需要查找String.to_integer/1
。以下应该有效:
age = IO.gets("age: ") |> String.trim
agea = String.to_integer(age)
...
答案 1 :(得分:1)
回答第二个问题:
如果下面的代码(下面的示例不在elixir中),我如何执行其他操作,例如:
a=5 if(a<3){ printf("less than 3") else if (a>=3 && a<10){ printf ("something ") else{ printf("something") }
有两种方法:
case
有警卫
a = 5
IO.puts case a do
a when (a < 3) -> "less than 3"
a when (a >= 10) -> "greater than 10"
else -> "something"
end
<强> cond
强>
a = 5
IO.puts cond do
a < 3 -> "less than 3"
a >= 10 -> "greater than 10"
true -> "something"
end
if
关键字在Elixir中非常罕见,通常被认为是代码气味。