假设我想通过像filter
这样的组合器传递一个枚举的字符列表,以便像这样删除所有a:
'abc' |> Enum.filter(fn ch -> ch != 'a' end)
这不会返回预期的结果,因为枚举的字符实际上是代码点,此处为 97、99 和 99。因此,谓词可以表示为ch != 97
或<<ch::utf8>> != "a"
,以达到预期的结果。
在这种情况下,有没有更好、更直观的表达谓词的方式?
您可以使用?
来实现此目的:
iex(1)> 'abc' |> Enum.filter(fn ch -> ch != ?a end)
'bc'
你也可以反过来做:
'abc' |> Enum.filter(fn ch -> [ch] != 'a' end)
虽然我更喜欢使用?a
,而且我更喜欢使用二进制文件而不是字符列表。