This PR fixes issues involved with the syntaxes to specify expression types.
Currently, @capture and @match can't distinguish between their syntax
to specify a :head of Expr and a variable name with underscores.
For example, in the example below, @capture recognizes global_string
as the syntax to specify Expr's head (i.e. :string), not as a simple
variable name:
julia> ex = :(global_string = 10);
julia> @capture(ex, global_string = n_) # tries to match `Expr(:string, ...) = n_` and bound the matched lhs into a variable `global` and the matched rhs into a variable `n`.
false
Since an expression can really have an arbitrary head, @capture macro
can't really distinguish them (while we can do some assertion when the
syntax to specify atomic expression type, though).
This PR implements new macros @capture_notb and @match_notb, which
ignore all the expression type matching syntaxes and provide the ways to
circumvent the issue described above:
julia> ex = :(global_string = 10)
julia> @capture_notb(ex, global_string = n_) # tries to match `global_string = n_` pattern and bound the matched rhs into a variable `n`.
true
These changes aren't breaking but they're somewhat a big change, I'd
like to minor version bump.
This PR fixes issues involved with the syntaxes to specify expression types.
Currently,
@capture
and@match
can't distinguish between their syntax to specify a:head
ofExpr
and a variable name with underscores. For example, in the example below,@capture
recognizesglobal_string
as the syntax to specifyExpr
's head (i.e.:string
), not as a simple variable name:Since an expression can really have an arbitrary head,
@capture
macro can't really distinguish them (while we can do some assertion when the syntax to specify atomic expression type, though).This PR implements new macros
@capture_notb
and@match_notb
, which ignore all the expression type matching syntaxes and provide the ways to circumvent the issue described above:These changes aren't breaking but they're somewhat a big change, I'd like to minor version bump.