2017-10-06 64 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