2017-10-06 65 views
1

我想让下面的代码块返回值不等于0或n。但有时它返回的值等于0.elixir递归块没有返回正确的值

def get_random(n, num) do 
    random = returns some number 
    IO.puts random 
    if random == n or random == 0 do 
     get_random(n, num) 
    end 
    random 
end 
+0

不应该在你的if语句中使用'''random'''而不是'''ran'''吗? – Pfitz

+0

我改变了变量名称。谢谢。 – randomcoder

回答

1

您没有设置random第二次变量。

固定码:

defmodule GetRandom do 
    def get_random(n, num) do 
    random = Enum.random(0..num) 
    IO.puts random 
    random = if random == n or random == 0 do 
     get_random(n, num) 
    else 
     random 
    end 
    random 
    end 
end 

此代码可以被简化。首先,如果使用Enum.random,则呼叫后不需要排除0。只是将它排除在范围之外。

另外,使用隐式值返回。如果它在函数的结尾,则不需要第二次设置random

defmodule GetRandom do 
    def get_random(n, num) do 
    random = Enum.random(1..num) 
    IO.puts random 
    if random == n do 
     get_random(n, num) 
    else 
     random 
    end 
    end 
end