Do binary patterns declared in function heads have to have static sizes? It appears to be the case, but I can’t find documentation one way or the other.
More concretely, it is possible to match a binary with a “#” as the third byte like this:
Interestingly, flipping the order of the arguments to the function results in a slightly different error:
def foo(n, <<header::binary-size(n), "#", rest::binary>>), do: something()
** (CompileError) iex:46: undefined variable "n" in bitstring segment. If the size of the binary is a variable, the variable must be defined prior to its use in the binary/bitstring match itself, or outside the pattern match
That error message makes it seem like what I’m trying to do is not possible, but maybe I’m just missing something?
I assume this constraint is somehow related to the details of compiling function heads? Because inside of a function, I can pass a variable to the size macro:
def foo(str, n) do
case str do
<<header::binary-size(n), "#", rest::binary>> -> something()
end
end