为什么可以';我在elixir的过滤函数中使用or语句吗?
在elixir中,如果我对列表进行操作,得到3的倍数:为什么可以';我在elixir的过滤函数中使用or语句吗?,elixir,Elixir,在elixir中,如果我对列表进行操作,得到3的倍数: 1..10 |> Enum.filter(fn(x) -> (rem(x,3) == 0) end) 输出:[3,6,9] 其中,好像我添加了一个or语句: 1..10 |> Enum.filter(fn(x) -> (rem(x,3) == 0 || rem(x,5)) end) 输出:[1,2,3,4,5,6,7,8,9,10] 为什么or语句(已括在括号内)会给出意外输出?rem/2将返回一个整数作为其
1..10 |> Enum.filter(fn(x) -> (rem(x,3) == 0) end)
输出:[3,6,9]
其中,好像我添加了一个or语句:
1..10 |> Enum.filter(fn(x) -> (rem(x,3) == 0 || rem(x,5)) end)
输出:[1,2,3,4,5,6,7,8,9,10]
为什么or语句(已括在括号内)会给出意外输出?
rem/2
将返回一个整数作为其结果-所有整数在Elixir中都是真实的,包括0
。这意味着rem(x,5)
始终是真实的,过滤函数将始终生成真实并保留所有项。您可能打算使用:
iex(1)> 1..10 |> Enum.filter(fn(x) -> rem(x,3) == 0 || rem(x,5) == 0 end)
[3, 5, 6, 9, 10]
rem/2
将返回一个整数作为其结果-所有整数在Elixir中都是真实的,包括0
。这意味着rem(x,5)
始终是真实的,过滤函数将始终生成真实并保留所有项。您可能打算使用:
iex(1)> 1..10 |> Enum.filter(fn(x) -> rem(x,3) == 0 || rem(x,5) == 0 end)
[3, 5, 6, 9, 10]