2016-08-03 5 views
1

Elixier der Dokumentation ZuständeVerwenden Sie drop_while in Elixir?

drop_while(enumerable, fun) 
    Drops items at the beginning of the enumerable while fun returns a truthy value 

Aber ich bin mit dem unten Ausgang verwirrt. Bedeutet es, sobald es !truthy10 wird alles andere als falsch behandelt?

iex> Enum.drop_while([0,1,2,3,4,5], fn(x) -> rem(x,2) == 0 end) 
[1,2,3,4,5] 

ich eine Leistung von [1,3,5] erwartet, weil

iex> Enum.map([0,1,2,3,4,5], fn(x) -> rem(x,2) == 0 end) 
[true,false,true,false,true,false] 

Ich versuche zu verstehen, wie es funktioniert, anstatt zu versuchen den Ausgang möchte ich zu bekommen (es gibt Enum.filter das Ergebnis zu erreichen)

Antwort

3

Sie suchen nach Enum.reject/2, nicht Enum.drop_while/2. Wie die Dokumentation sagt, Enum.drop_while fällt von der beginnend bis fun gibt einen truthy Wert zurück. In Ihrem Beispiel gibt funtrue für 1 zurück, so dass Sie alle Elemente der ursprünglichen Liste ab 1 erhalten.

iex(1)> Enum.reject([0, 1, 2, 3, 4, 5], fn(x) -> rem(x, 2) == 0 end) 
[1, 3, 5] 
+0

Also, bis ein truthy Wert ist der Schlüssel, um es zu verstehen. – Bala