gpt4 book ai didi

pattern-matching - 模式匹配中 byte_size 的语法是什么?

转载 作者:行者123 更新时间:2023-12-04 07:24:24 26 4
gpt4 key购买 nike

如何匹配以及检查什么语法byte_size等于 handle_info() 中的 12 长度模式?我可以在 handle_info() 中使用这两种模式吗? ,例如。第一个将检查新行的字符串,第二个是 byte_size ?

不带 byte_size 的示例代码图案:

def init(_) do
{:ok, []}
end

def handle_info({:elixir_serial, serial, "\n"}, state) do
{:noreply, Enum.reverse(state)}
end

def handle_info({:elixir_serial, serial, data}, state) do
Logger.debug "data: #{data}"
{:noreply, [data | state]}
end

最佳答案

是的,您可以同时使用这两种模式,这就是拥有多个函数子句的目的。从上到下,第一个匹配的函数子句将被执行。

您可以使用不同的二进制模式来匹配 12 个字节,具体取决于您需要的输出:

iex> <<data::bytes-size(12)>> = "abcdefghijkl"
"abcdefghijkl"
iex> data
"abcdefghijkl"

iex> <<data::size(96)>> = "abcdefghijkl"
"abcdefghijkl"
iex> data
30138990049255557934854335340

这些模式当然可以用在你的函数子句中:
def handle_info({:elixir_serial, serial, <<data::bytes-size(12)>>}, state) do
# ...
end

def handle_info({:elixir_serial, serial, <<data::size(96)>>}, state) do
# ...
end

有关可用类型和修饰符的更多信息,您可以查找位串语法 online 的文档。或在 iex通过输入 h <<>> .

您也可以将保护子句与 byte_size 一起使用:
def handle_info({:elixir_serial, serial, data}, state) when byte_size(data) == 12 do
# ...
end

关于pattern-matching - 模式匹配中 byte_size 的语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33352329/

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