如果在长生不老药中给予错误回应

时间:2017-05-22 08:09:57

标签: elixir elixir-framework

我是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")
}

2 个答案:

答案 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中非常罕见,通常被认为是代码气味。