在Elixir中使用drop_while?

Bal*_*ala 1 elixir

Elixir的文档说明

drop_while(enumerable, fun)
   Drops items at the beginning of the enumerable while fun returns a truthy value
Run Code Online (Sandbox Code Playgroud)

但是我对下面的输出感到困惑。这是否意味着一旦获得!truthy所有其他一切,就被视为错误?

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

我期望输出是[1,3,5]因为

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

我试图了解它的工作原理,而不是试图获得我想要的输出(Enum.filter实现结果)

Dog*_*ert 5

您在寻找Enum.reject/2,不是Enum.drop_while/2。就像文档中所说的那样,Enum.drop_while从一开始就丢弃,直到fun返回真实值。在您的示例中,fun返回true1,因此您可以从开始获得原始列表的所有元素1

iex(1)> Enum.reject([0, 1, 2, 3, 4, 5], fn(x) -> rem(x, 2) == 0 end)
[1, 3, 5]
Run Code Online (Sandbox Code Playgroud)