如何匹配以及在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
答案 0 :(得分:5)
是的,您可以使用这两种模式,这是具有多个函数子句的目的。从上到下,将执行第一个匹配的函数子句。
您可以使用不同的二进制模式匹配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
有关可用类型和修饰符的更多信息,您可以通过键入iex
来查找bitstring语法online或h <<>>
中的文档。
你也可以使用一个保护条款和byte_size
:
def handle_info({:elixir_serial, serial, data}, state) when byte_size(data) == 12 do
# ...
end