gpt4 book ai didi

erlang - Elixir 上的二进制理解

转载 作者:行者123 更新时间:2023-12-02 05:27:09 25 4
gpt4 key购买 nike

是否可能,如果可以,我如何在 Elixir 上使用二进制理解?我可以在 Erlang 上这样做:

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

最佳答案

Erlang 中的内容是:

1> [Red || <<Red:2/binary, _Blue:2/binary>> <= <<1, 2, 3, 4, 5, 6, 7, 8>> ].
[<<1,2>>,<<5,6>>]

在 Elixir 中是:

iex(1)> for <<red::8, green::8, blue::16 <- <<1, 2, 3, 4, 5, 6, 7, 8>> >>, do: <<red, green>>
[<<1, 2>>, <<5, 6>>]

请注意,上面的 Elixir 显式声明了以位为单位的大小,而 Erlang 使用一种类型来使计算截断以字节为单位的大小。在 Elixir 中可能有一种更干净的方法来做到这一点(至少我希望有),我什至可能会四处寻找它 - 但大多数时候,当我想广泛地做这些事情时,我坚持使用 Erlang 只是为了可读性/通用性。

附录

@aronisstav 提出了一个有趣的问题:“Erlang 代码中不应该有一个与 green 模式匹配的部分吗?”

答案是会有 Green Erlang 中的变量是处理位串而不是二进制文件的代码。 Erlang's bit syntax provides ways to indicate a few arbitrary binary types which correspond to default sizes 。上面我匹配了Red:2/binary这意味着我想匹配一个2字节的序列,这就是我们得到结果[<<1,2>><<5,6>>]的方式:两个字节的两个序列。

与上面的 Elixir 代码完全等效的 Erlang 示例是:

[<<Red/bitstring, Green/bitstring>>
|| <<Red:8/bitstring, Green:8/bitstring, _Blue:2/binary>>
<= <<1, 2, 3, 4, 5, 6, 7, 8>> ].

但是这样做很愚蠢,因为 Erlang 的字节语法要简洁得多。

关于erlang - Elixir 上的二进制理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33645557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com