Макрос RecipesBase.jl @recipe
использует пару специальных операторов, построенных из символов ASCII, а именно -->
и :=
. Эти последовательности символов, кажется, имеют какой-то особый атрибут, который позволяет их анализировать в Expr
. Сравните -->
с --
:
julia> 1 --> 2
ERROR: syntax: invalid syntax 1 --> 2
julia> 1 -- 2
ERROR: syntax: invalid operator "--"
julia> :(1 --> 2)
:($(Expr(:-->, 1, 2)))
julia> :(1 -- 2)
ERROR: syntax: invalid operator "--"
Интересно, что 1 --> 2
анализируется с заголовком выражения :-->
, тогда как другие бинарные операторы, включая бинарные операторы Unicode, такие как ↑
(типизированныекак \uparrow
+ TAB
), анализируются с помощью выражения :call
:
julia> dump(:(1 --> 2))
Expr
head: Symbol -->
args: Array{Any}((2,))
1: Int64 1
2: Int64 2
julia> dump(:(1 ↑ 2))
Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol ↑
2: Int64 1
3: Int64 2
Итак, у меня есть несколько связанных вопросов:
- Что случилосьс
-->
и :=
? (РЕДАКТИРОВАТЬ: Другими словами, почему эти последовательности символов специально анализируются?) - Существуют ли другие последовательности символов ASCII, которые ведут себя аналогично
-->
и :=
и поэтому могут использоваться в качестве операторов в макросах? - Есть ли где-нибудь документация, в которой перечислены различные "специальные" последовательности символов ASCII?