对Elixir的二元理解

时间:2015-11-11 06:51:24

标签: erlang elixir

是否可能,如果是这样,我怎么能在Elixir上使用二元理解?我可以在Erlang上这样做:

[One || <<One, _rest:3/binary>> <= <<1,2,3,4>>].

2 个答案:

答案 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只是为了可读性/普遍性。

<强>附录

@aronisstav问了一个有趣的问题:&#34;在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