This package provides the utilities not found in InteractiveUtils and Meta modules. This is the renamed and enhanced version of the deprecated package InteractiveUtilsPlus.jl.
Add this package by REPL package manager:
julia> ]
pkg> add https://github.com/genkuroki/MetaUtils.jlOr, add this package using Pkg.jl.
julia> using Pkg; Pkg.add(url="https://github.com/genkuroki/MetaUtils.jl")For the detaild usage, see the Jupyter notebook MetaUtils.ipynb.
julia> using MetaUtilsjulia> @show_sexpr 2x+1
(:call, :+, (:call, :*, 2, :x), 1)julia> x = 10; (:call, :+, (:call, :*, 2, :x), 1) |> teval
21julia> @show_tree 2x+1
Expr(:call)
├─ :+
├─ Expr(:call)
│ ├─ :*
│ ├─ 2
│ └─ :x
└─ 1julia> show_tree(:(2x+1))
Expr(:call)
├─ :+
├─ Expr(:call)
│ ├─ :*
│ ├─ 2
│ └─ :x
└─ 1julia> print_subtypes(AbstractRange)
AbstractRange
├─ LinRange
├─ OrdinalRange
│ ├─ AbstractUnitRange
│ │ ├─ Base.IdentityUnitRange
│ │ ├─ Base.OneTo
│ │ ├─ Base.Slice
│ │ └─ UnitRange
│ └─ StepRange
└─ StepRangeLenjulia> show_expr(:(f(x, g(y, z))))
Expr(:call, :f, :x,
Expr(:call, :g, :y, :z))julia> @show_expr 2x+1
Expr(:call, :+,
Expr(:call, :*, 2, :x), 1)julia> x = 10; Expr(:call, :+,
Expr(:call, :*, 2, :x), 1) |> eval
21julia> show_expr(:(f(x, g(y, z))))
Expr(:call, :f, :x,
Expr(:call, :g, :y, :z))julia> @show_texpr 2x+1
(:call, :+,
(:call, :*, 2, :x), 1)julia> x = 10; (:call, :+,
(:call, :*, 2, :x), 1) |> teval
21julia> (:call, :sin, (:call, :/, π, 6)) |> teval
0.49999999999999994julia> @teval (:call, :sin, (:call, :/, π, 6))
0.49999999999999994julia> (:sin, (:/, π, 6)) |> teval
0.49999999999999994julia> @teval (:sin, (:/, π, 6))
0.49999999999999994julia> MetaUtils.@t (:call, :sin, (:call, :/, π, 6))
:(sin(π / 6))
→ 0.49999999999999994julia> MetaUtils.@T (:call, :sin, (:call, :/, π, 6))
(:call, :sin, (:call, :/, π, 6))
→ (:call, :sin,
(:call, :/, π, 6))
→ :(sin(π / 6))
→ 0.49999999999999994