是否可能,如果是这样,我怎么能在Elixir上使用二元理解?我可以在Erlang上这样做:
[One || <<One, _rest:3/binary>> <= <<1,2,3,4>>].
答案 0 :(得分:3)
Erlang是什么:
=SUMPRODUCT(COUNTIFS(Sales!A:A,A2,Sales!C:C,"*"))
在Elixir中:
1> [Red || <<Red:2/binary, _Blue:2/binary>> <= <<1, 2, 3, 4, 5, 6, 7, 8>> ].
[<<1,2>>,<<5,6>>]
请注意,上面的Elixir明确地以位为单位声明大小,而Erlang使用一种类型来使计算斩掉大小(以字节为单位)。在Elixir中可能有一种更清洁的方法(至少我希望有),我甚至可以寻找它 - 但大多数时候我想广泛地做这件事我坚持Erlang只是为了可读性/普遍性。
<强>附录强>
iex(1)> for <<red::8, green::8, blue::16 <- <<1, 2, 3, 4, 5, 6, 7, 8>> >>, do: <<red, green>>
[<<1, 2>>, <<5, 6>>]
模式匹配的部分?&#34;
答案是将作为Erlang中的green
变量是处理位串而不是二进制的代码。 Erlang's bit syntax provides ways to indicate a few arbitrary binary types which correspond to default sizes。上面我匹配Green
这意味着我想匹配一个2字节的序列,这就是我们得到结果Red:2/binary
的方式:两个字节的两个序列。
完全的Erlang示例等同于上面的Elixir代码:
[<<1,2>><<5,6>>]
但这样做很愚蠢,因为Erlang的字节语法更加简洁。
答案 1 :(得分:0)
我在文档中找到了解决方案:
for << one, _rest :: binary - size(3) <- <<1,2,3,4>> >>, do: one