elixir递归块未返回正确的值

时间:2017-10-06 07:43:56

标签: elixir

我希望以下代码块返回不等于0或n的值。但有时它会返回等于0的值。

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

1 个答案:

答案 0 :(得分: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