2017-10-06 1 views
1

Ich möchte, dass der folgende Codeblock den Wert ungleich 0 oder n zurückgibt. Aber manchmal gibt es Werte, die gleich 0.Elixir Rekursionsblock gibt keinen korrekten Wert zurück

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

sollte es '' 'random''' anstelle von' '' ran''' in Ihrer if-Anweisung sein? – Pfitz

+0

Ich habe den Variablennamen geändert. Vielen Dank. – randomcoder

Antwort

1

Sie nicht random variable zweites Mal eingestellt haben.

Festcode:

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 

Dieser Code kann vereinfacht werden. Wenn Sie Enum.random verwenden, müssen Sie nach dem Anruf 0 nicht ausschließen. Einfach aus der Reichweite ausschließen.

Verwenden Sie auch implizite Rückgabewerte. Sie müssen die Variable random nicht variabel einstellen, wenn sie sich am Ende der Funktion befindet.

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