在灵药中,如果我在列表上操作,得到3的倍数:
1..10 |> Enum.filter(fn(x) -> (rem(x,3) == 0) end)
Run Code Online (Sandbox Code Playgroud)
输出: [3, 6, 9]
好像我添加一个或声明的地方:
1..10 |> Enum.filter(fn(x) -> (rem(x,3) == 0 || rem(x,5)) end)
Run Code Online (Sandbox Code Playgroud)
输出: [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]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
49 次 |
最近记录: |